簡體   English   中英

使用 Pulp 進行優化,只給出 0 作為結果

[英]Using Pulp for optimization giving only 0 as results

我正在編寫一個代碼,在給定一組約束的情況下最大化我的目標 function 的價值。 它有四個標記為 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]說解決方案是未定義的。

相同的方程組在 LinProg 中為我提供了一個解 [ 6.60059411, 3.9736669, -0.52664072, 1.09008012]

您的解決方案不滿足第二個約束。 檢查:2x6.60059411 - 3x3.9736669 - 7x(-0.52664072) + 3x1.09008012 = 8.2369 < 10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM