Python 使用矩阵形式的约束进行纸浆线性规划
Python Pulp Linear Programming using constraints in matrix form
使用纸浆和 python 我正在尝试解决以下形式的水平衡(类似于经典运输问题)线性规划问题:
根据以下条件将 c'x 最小化:
Ax=b
lb<=x<=ub
其中 A 是 (10x18) 矩阵,c(1x18) 和 b(10x1) 是向量,U (18x2) 是分别包含 lb 和 ub 的两列矩阵。
import pulp as p
import pandas as pd
import numpy as np
A=pd.read_csv(r"C:\...\A.csv",delimiter=',',dtype='int8',header=None)
A=A.to_numpy()
c=pd.read_csv(r"C:\...\c.csv",delimiter=',',dtype='float64',header=None)
c=c.to_numpy()
U=pd.read_csv(r"C:\...\U.csv",delimiter=',',dtype='float64',header=None)
b=pd.read_csv(r"C:\...\b.csv",delimiter=',',dtype='float64',header=None)
b=b.to_numpy()
# Create a LP Minimization problem
Lp_prob = p.LpProblem('Problem', p.LpMinimize)
# Create problem Variables
x = p.LpVariable("x", lowBound = U[0], upBound = U[1]) # Create a variable x
# Objective Function
c=np.transpose(c)
Lp_prob+= p.lpSum(c*x)
# Constraints:
Lp_prob += p.lpSum(A*x) == b
# Display the problem
print(Lp_prob)
status = Lp_prob.solve() # Solver
print(p.LpStatus[status]) # The solution status
# Printing the final solution
print(p.value(x), p.value(Lp_prob.objective))
问题
当我尝试 运行 项目时,它显示消息
"File
"C:\Users\stavroula\Anaconda3\lib\site-packages\pandas\core\generic.py",
line 1555, in nonzero
self.class.name
ValueError: The truth value of a Series is ambiguous. Use a.empty,
a.bool(), a.item(), a.any() or a.all()."
为什么会这样?
使用scipy.optimize.linprog()例程可以成功解决问题
提前致谢!!
PuLP 不使用矩阵表示法。所以 A*x
变成类似的东西(用伪代码表示法):
sum_j A[i,j]*x[j]
如果您想使用矩阵表示法,请查看 CVXPY。
使用纸浆和 python 我正在尝试解决以下形式的水平衡(类似于经典运输问题)线性规划问题:
根据以下条件将 c'x 最小化:
Ax=b
lb<=x<=ub
其中 A 是 (10x18) 矩阵,c(1x18) 和 b(10x1) 是向量,U (18x2) 是分别包含 lb 和 ub 的两列矩阵。
import pulp as p
import pandas as pd
import numpy as np
A=pd.read_csv(r"C:\...\A.csv",delimiter=',',dtype='int8',header=None)
A=A.to_numpy()
c=pd.read_csv(r"C:\...\c.csv",delimiter=',',dtype='float64',header=None)
c=c.to_numpy()
U=pd.read_csv(r"C:\...\U.csv",delimiter=',',dtype='float64',header=None)
b=pd.read_csv(r"C:\...\b.csv",delimiter=',',dtype='float64',header=None)
b=b.to_numpy()
# Create a LP Minimization problem
Lp_prob = p.LpProblem('Problem', p.LpMinimize)
# Create problem Variables
x = p.LpVariable("x", lowBound = U[0], upBound = U[1]) # Create a variable x
# Objective Function
c=np.transpose(c)
Lp_prob+= p.lpSum(c*x)
# Constraints:
Lp_prob += p.lpSum(A*x) == b
# Display the problem
print(Lp_prob)
status = Lp_prob.solve() # Solver
print(p.LpStatus[status]) # The solution status
# Printing the final solution
print(p.value(x), p.value(Lp_prob.objective))
问题 当我尝试 运行 项目时,它显示消息
"File "C:\Users\stavroula\Anaconda3\lib\site-packages\pandas\core\generic.py", line 1555, in nonzero self.class.name
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()."
为什么会这样?
使用scipy.optimize.linprog()例程可以成功解决问题
提前致谢!!
PuLP 不使用矩阵表示法。所以 A*x
变成类似的东西(用伪代码表示法):
sum_j A[i,j]*x[j]
如果您想使用矩阵表示法,请查看 CVXPY。