поиск минимума функции python
Прошу подсказать способ решения следующей задачи. Есть ли готовый метод в scipy
Даны две функции g1, g2
g1 = c1*x1+c2*x2+c3*x3+c4*x4
g2 = m1*x1+m2*x2+m3*x3+m4*x4
необходимо найти такие целочисленные значения x1, x2, x3, x4 для заданных наборов С и M для следующих условий:
1. g1 = 1000
2. g2 -> min
3. значения x ограничены
x1 ∈ [0;6]
x2 ∈ [0;10]
x3 ∈ [0;10]
x4 ∈ [0;3]
Ответы (2 шт):
Автор решения: passant
→ Ссылка
Надеюсь, ТС в курсе, что задачи такого типа среди грамотной аудитории называются задачами линейного программирования. Для их решения есть "готовый метод" scipy.optimize.linprog().
Автор решения: nikobu
→ Ссылка
самым коротким вариантом решения оказался pulp, для целочисленного ответа ключ cat="Integer" при объявлении переменных
import pulp
x1 = pulp.LpVariable("x1", lowBound=0, upBound = 6, cat="Integer")
x2 = pulp.LpVariable("x2", lowBound=0, upBound = 10, cat="Integer")
x3 = pulp.LpVariable("x3", lowBound=0, upBound = 10, cat="Integer")
x4 = pulp.LpVariable("x4", lowBound=0, upBound = 3, cat="Integer")
problem = pulp.LpProblem('g2', pulp.LpMinimize)
#здесь коэф заданы вручную
problem += 100*x1+300*x2+5300*x3+1400*x4, "g2"
problem += 50*x1+100*x2+500*x3+100*x4 == 1000,"g1"
problem.solve()