Optimization 如何解决CVXPY中的设施位置分配(IP)问题
我正在学习使用CVXPY解决优化问题,因此我从以下简单的设施位置分配问题开始 CVXPY中的代码如下所示:Optimization 如何解决CVXPY中的设施位置分配(IP)问题,optimization,integer-programming,cvxpy,Optimization,Integer Programming,Cvxpy,我正在学习使用CVXPY解决优化问题,因此我从以下简单的设施位置分配问题开始 CVXPY中的代码如下所示: Fi = np.array([1,1,1]) # Fixed cost of each facility Ci = np.array([15, 10, 10]) # Capacity of each facility Dj = np.array([5, 5, 5, 3, 3, 4]) # Demand of each facility Cij = np.ones(m
Fi = np.array([1,1,1]) # Fixed cost of each facility
Ci = np.array([15, 10, 10]) # Capacity of each facility
Dj = np.array([5, 5, 5, 3, 3, 4]) # Demand of each facility
Cij = np.ones(m,n)
n = len(Dj)
m = len(Fi)
# Decision Variables
Xij = cvx.Bool(m,n) # (m,n) vector
Yi = cvx.Bool(m) # column vector of length (m,1)
# Objective
fixed_cost = cvx.sum_entries(Fi*Yi)
var_cost = cvx.sum_entries(Cij.T * Dj *Xij)
total_cost = fixed_cost + var_cost
objective = cvx.Minimize(total_cost)
# Maximum facility locations to be selected?
constraints.append(cvx.sum_entries(Yi)==2)
# Sum of demands allocated to a facility shall be <= facility capacity -
# Capacity Fixed Cost
constraints.append(cvx.sum_entries(Dj * Xij.T, axis=0) <= Ci*Yi)
# Every demand point shall be supplied by only one facility.
constraints.append(cvx.sum_entries(Xij, axis=1) == 1)
# Solve the problem
prob = cvx.Problem(objective, constraints)
prob.solve(solver=cvx.GLPK_MI)
# Print the values
#print("status:", prob.status)
print("optimal value", prob.value)
print("Selected Facility Locations", Yi.value)
print("Assigned Nodes", Xij.value, )
Xij.value应该是这样的:
Using CVXPY version: 0.4.10
status: optimal
optimal value 91.0
Selected Facility Locations [[1.]
[1.]
[0.]]
Assigned Nodes to Facility 1) [[1. 1. 1. 0. 0. 0.]]
Assigned Nodes to Facility 2) [[0. 0. 0. 1. 1. 1.]]
Assigned Nodes to Facility 3) [[0. 0. 0. 0. 0. 0.]]
也就是说,选择了设施1和设施2。
前三个点分配给设施1,后三个点分配给设施2。X==1告诉它所有的值都是1否,即使我删除了约束,X.value仍然是一个矩阵。您的代码不起作用,例如m,n是在第一次使用后定义的。如果您可以提供与cvxpy 1.0兼容的可复制代码,那么我很乐意提供帮助。@MichalAdamaszek&OP:Hi,我将代码更新为cvxpy 1.0并使其可运行
Using CVXPY version: 0.4.10
status: optimal
optimal value 91.0
Selected Facility Locations [[1.]
[1.]
[0.]]
Assigned Nodes to Facility 1) [[1. 1. 1. 0. 0. 0.]]
Assigned Nodes to Facility 2) [[0. 0. 0. 1. 1. 1.]]
Assigned Nodes to Facility 3) [[0. 0. 0. 0. 0. 0.]]