使用Pulp进行优化,结果仅为0



我正在编写一段代码,该代码在给定一组约束的情况下最大化我的目标函数的值。它有四个变量,标记为x1到x4,有两个等式约束和两个不等式约束。用Linprog求解得到了一个正确的结果。但用纸浆法只能给我零作为结果。

from pulp import LpMaximize, LpProblem, LpStatus, lpSum, LpVariable
import numpy as np
# Create the model
model = LpProblem(name="optimize", sense=LpMaximize)
# Initialize the decision variables
x1 = LpVariable(name="x1", lowBound= 0, upBound = None, cat='Continuous')
x2 = LpVariable(name="x2", lowBound= 0, upBound = 5, cat='Continuous')
x3 = LpVariable(name="x3", lowBound=None, upBound = 0.5, cat='Continuous')
x4 = LpVariable(name="x4", lowBound=-3, upBound = None, cat='Continuous')
#Objective function of the model
obj_func =  (29 * x1 + 45 * x2)
model += obj_func

# Add the constraints to the model
model += (x1 - x2 - 3 * x3 <= 5, "Constraint_1")
model += (2 * x1 - 3 * x2 -7 * x3 + 3 * x4 >= 10, "Constraint_2")
model += (2 * x1 + 8 * x2 + x3 == 60, "Constraint_3")
model += (4 * x1 + 4 * x2 + x4 == 60, "Constraint_4")
model
# Solve the problem
status = model.solve()
LpStatus[model.status]
model.variables()
for var in model.variables():
print(f"{var.name}: {var.value()}")

我可以看到LpStatus[model.status]说解是Undefined

同样的一组方程在linprogas中给出了一个解[6.60059411, 3.9736669, -0.52664072, 1.09008012]

您的解决方案不满足第二个约束。检查:3x3.9736669 - 7x(-0.52664072) + 3x1.09008012 = 8.2369 <10

最新更新