Минимизируйте систему линейного программирования на C - PullRequest
0 голосов
/ 15 мая 2019

Мне нужно минимизировать огромную систему линейного программирования, где все связанные данные (целевая функция, ограничения) хранятся в памяти в массивах и структурах, но не в формате файла lp или CPLEX

Я видел, что есть много решателей, таких как здесь и здесь , но проблема в том, как я могу свернуть модель, не вызывая ее из файла специального формата?

Я проделал ту же самую работу ранее в R и Python, решая модель непосредственно после ее создания, без необходимости сначала сохранять ее в специальном файле, а затем вызывать ее с помощью решателя. Вот пример на Python:

from lpsolve55 import *
from lp_maker import *
from lp_solve import *

lp = lp_maker(obj_func, constraints , rhs, sense_equality)
solvestat = lpsolve('solve', lp)
obj = lpsolve('get_objective', lp)

Я думаю, что это возможно сделать в C, но на самом деле я не знаю, где найти, как это можно сделать.

1 Ответ

4 голосов
/ 15 мая 2019

Одним из вариантов является использование API, которые коммерческие решатели, такие как CPLEX и Gurobi , предоставляют для C / C ++. По сути, эти API позволяют вам строить модель из логических блоков (целевая функция, ограничения и т. Д.). API выполняют работу по преобразованию логики модели в матрицы и векторы , которые на самом деле нужны решателю для решения модели.

Другой подход заключается в использовании языка моделирования, такого как AMPL или GAMS. AMPL, например, также предоставляет C / C ++ API .

Какой из них вы выберете, вероятно, зависит от того, какой решатель вы планируете использовать и как часто вам нужно программно модифицировать свою модель и / или данные.

...