Как стать автором
Обновить

Комментарии 3

Отличная статья, мне импонирует ваш подход.

Как я понял вы заставляете нейросеть искать корреляты среди параметров входного набора переменных и отбрасывать малозначимые переменные для ускорения расчёта решателем. Но как показывает практика решения MILP, такие переменные почти не дробятся и так. Выигрыш получается только на уменьшении симплекс матрицы, и довольно скромный.

Обычно для решения MILP используются решатели вроде Gurobi и Cplex.

Да эти коммерческие решатели очень хороши, но как альтернативу я бы предложил не SCIP, а CBC от COIN-OR. По крайней мере в моих задачах он в разы быстрее и точнее.

Ещё мне очень зашла библиотека scipy.optimize для Python, с методами:

scipy.optimize.linprog
scipy.optimize.milp

Там есть некоторая проблема с точностью, но зато библиотека очень хороша за счёт разреженных матриц на задачах от 10к переменных.

И ещё, мне думается, что для задач распределения лучше подходит не линейное программирование, а Constraint programming. Хотя часто для последнего и используется линейные решатели.

спасибо за Ваш комментарий. По решателям мы много эксперементировали, в некоторых задачах лучше cbc в некоторых scip или highs, тут надо пробовать, но cbc на текущий момент не развивается, так что я стараюсь его не использовтаь.

scipy последних версий под капотом использует highs, можно его же использовать и в более приятных обертках чем scipy. Линейные задачи она решает очень быстро, видемо зща счет хорошо реализованного interior point метода.

Вот вы можете привести пример где для задач распределения используется CP? Может быть Вы minizinc шде-то применяли? можете поделиться впечатлениями?

Minizinc мне не зашёл даже с Zython. Очень понравился решатель ortools.sat от гугла, быстро удобно опенсорстно. Он умеет как integer programming, так и constraint programing.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий