В Scipy Linprog есть ли настройка, которая делает результаты «приятнее»? - PullRequest
1 голос
/ 19 марта 2020

Я решил следующую линейную программу с scipy.optimize.linprog:

result = linprog(
    [0, 0, 0, 0],
    A_eq=[
        [1, 1, 0, 0],
        [1, 0, 1, 1]
    ],
    b_eq=[
        -10000, -10000
    ],
    bounds=[(None, -1000), (None, -1000), (None, -1000), (None, -1000)]
)
print(result.x)

И получил:

[-4982.07750764 -5017.92249214 -2508.96124608 -2508.96124608]

Эта программа имеет много решений, которые численно "лучше" (имеют более круглые числа), например:

[-5000 -5000 -2500 -2500]

Есть ли способ сказать linprog, чтобы предпочесть такие решения?

1 Ответ

1 голос
/ 19 марта 2020

По умолчанию linprog будет использовать метод внутренней точки. Это даст правильные решения, но они часто выглядят не очень красиво. Симплексный метод обычно дает более хорошие решения. Когда мы добавляем аргумент method = 'revised simplex', мы видим:

[-1000. -9000. -1000. -8000.]

Конечно, все еще не уникально, но выглядит немного лучше.

...