Чтение файла 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
структура output:
problem.variableNames
- Строковые массивы имен переменных
problem.constraintNames
- Структура имен ограничений:
problem.constraintNames.eqlin
Строковые массивы имен линейных ограничений равенства
problem.constraintNames.ineqlin
Строковые массивы имен ограничений линейного неравенства
The problem
структурные ограничения неравенства problem.Aineq
и problem.bineq
имеют тот же порядок, что и имена в problem.constraintNames.ineqlin
. Точно так же ограничения problem.Aeq
и problem.beq
имеют тот же порядок, что и имена в problem.constraintNames.eqlin
. The problem.variableNames
порядок совпадает с порядком переменных решения x
после выполнения linprog
или intlinprog
на problem
структура.
Пример: mpsread('filename','ReturnNames',true)
Типы данных: logical
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 пуст) |
|
Опции по умолчанию, как возвращено командой optimoptions(solver) |
variableNames | Строковые массивы, содержащий имена переменных из файла MPS. Это поле появляется только в том случае, если ReturnNames является true . |
constraintNames | Структура, содержащая имена ограничений из файла MPS. Описание см. в разделе ReturnNames . Это поле появляется только в том случае, если ReturnNames является true . |
mpsread
возвращает problem.Aineq
и problem.Aeq
как разреженные матрицы.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.