поиск минимума функции 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()
→ Ссылка