Считайте файл MPS для LP и данных об оптимизации MILP
увеличивает возвращенный problem
= mpsread(mpsfile
,'ReturnNames
',true)problem
структура с variableNames
и constraintNames
поля, содержащие имена переменных и ограничений в mpsfile
.
Загрузите mps
файл и решает задачу, которую он описывает.
Загрузите eil33-2.mps
файл от общедоступного репозитория. Просмотрите проблемный тип.
gunzip('http://miplib.zib.de/WebData/instances/eil33-2.mps.gz') problem = mpsread('eil33-2.mps')
problem = f: [4516x1 double] Aineq: [0x4516 double] bineq: [0x1 double] Aeq: [32x4516 double] beq: [32x1 double] lb: [4516x1 double] ub: [4516x1 double] intcon: [4516x1 double] solver: 'intlinprog' options: [1x1 optim.options.Intlinprog]
Заметьте тот problem.intcon
не пусто, и problem.solver
'intlinprog'
. Проблемой является целочисленная задача линейного программирования.
Измените опции, чтобы подавить итеративное отображение и сгенерировать график, в то время как решатель прогрессирует.
options = optimoptions('intlinprog','Display','final','PlotFcn',@optimplotmilp); problem.options = options;
Решите задачу путем вызова intlinprog
.
[x,fval,exitflag,output] = intlinprog(problem);
Optimal solution found. Intlinprog stopped because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).
Загрузите mps
файл и получает свою переменную и ограничительные имена.
Загрузите eil33-2.mps
файл от общедоступного репозитория. Просмотрите возвращенную структуру задачи.
gunzip('http://miplib.zib.de/WebData/instances/eil33-2.mps.gz') problem = mpsread('eil33-2.mps','ReturnNames',true)
problem = struct with fields: f: [4516×1 double] Aineq: [0×4516 double] bineq: [0×1 double] Aeq: [32×4516 double] beq: [32×1 double] lb: [4516×1 double] ub: [4516×1 double] intcon: [4516×1 double] solver: 'intlinprog' options: [1×1 optim.options.Intlinprog] variableNames: [4516×1 string] constraintNames: [1×1 struct]
Просмотрите первые несколько имен каждого типа.
problem.variableNames(1:4)
ans = 4×1 string array "x1" "x2" "x3" "x4"
problem.constraintNames.eqlin(1:4)
ans = 4×1 string array "c1" "c2" "c3" "c4"
В проблеме нет никаких ограничений неравенства.
problem.constraintNames.ineqlin
ans = 0×1 empty string array
mpsfile
— Путь к файлу MPSПуть к файлу MPS в виде вектора символов или строкового скаляра. mpsfile
должен быть файл в формате MPS.
Примечание
mpsread
не поддерживает полунепрерывные ограничения или ограничения SOS.
mpsread
файлы “фиксированного формата” поддержек.
mpsread
не поддерживает расширения, такие как objsense
и objname
.
mpsread
тихо игнорирует переменные в BOUNDS
разделите, которые ранее не появляются в COLUMNS
раздел файла MPS.
Пример: "documents/optimization/milpproblem.mps"
Типы данных: char |
string
ReturnNames
— Пара "имя-значение", указывающая к возвращаемой переменной и ограничению, называет из файла MPSfalse
(значение по умолчанию) | true
Пара "имя-значение", указывающая к возвращаемой переменной и ограничению, называет из файла MPS со значением заданный как логическая. false
указывает, чтобы не возвратить имена. true
причины mpsread
возвратить два дополнительных поля в problem
вывод структуры:
problem.variableNames
— Массив строк имен переменных
problem.constraintNames
— Структура ограничительных имен:
problem.constraintNames.eqlin
Массив строк линейных имен ограничения равенства
problem.constraintNames.ineqlin
Массив строк линейных имен ограничения неравенства
problem
ограничения неравенства структуры problem.Aineq
и problem.bineq
имейте тот же порядок как имена в problem.constraintNames.ineqlin
. Точно так же ограничения problem.Aeq
и problem.beq
имейте тот же порядок как имена в problem.constraintNames.eqlin
. problem.variableNames
порядок совпадает с порядком переменных x
решения после выполнения
linprog
или intlinprog
на problem
структура.
Пример: mpsread('filename','ReturnNames',true)
Типы данных: логический
problem
— Структура задачиСтруктура задачи, возвращенная как структура с полями:
f | Вектор, представляющий объективный f'*x |
intcon | Переменные указания вектора, которые принимают целочисленные значения (пустой для LP, непустого для MILP) |
Aineq | Матрица в линейных ограничениях неравенства Aineq*x ≤ bineq |
| Вектор в линейных ограничениях неравенства Aineq*x ≤ bineq |
| Матрица в линейных ограничениях равенства Aeq*x = beq |
| Вектор в линейных ограничениях равенства Aeq*x = beq |
lb | Вектор из нижних границ |
ub | Вектор из верхних границ |
solver | 'intlinprog' (если intcon непусто), или 'linprog' (если intcon isempty, |
|
Опции по умолчанию, как возвращено командой optimoptions(solver) |
variableNames | Массив строк, содержащий имена переменных из файла MPS. Это поле появляется только если ReturnNames true . |
constraintNames | Структура, содержащая ограничение, называет из файла MPS. Для описания смотрите ReturnNames . Это поле появляется только если ReturnNames true . |
mpsread
возвращает problem.Aineq
и problem.Aeq
как разреженные матрицы.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.