【发布时间】:2019-06-17 07:27:55
【问题描述】:
我正在尝试使用 Pulp Solver 将物品打包到卡车中,当物品数量很少(即
这是纸浆求解器的代码:
def allocator(item_mass, item_vol, truck_mass, truck_vol, truck_cost, id_series):
n_items = len(item_vol)
set_items = range(n_items)
n_trucks = len(truck_cost)
set_trucks = range(n_trucks)
y = pulp.LpVariable.dicts('truckUsed', set_trucks,
lowBound=0, upBound=1, cat=LpInteger)
x = pulp.LpVariable.dicts('itemInTruck', (set_items, set_trucks),
lowBound=0, upBound=1, cat=LpInteger)
# Model formulation
prob = LpProblem("Truck allocation problem", LpMinimize)
# Objective
prob += lpSum([truck_cost[i] * y[i] for i in set_trucks])
# Constraints
for j in set_items:
# Every item must be taken in one truck
prob += lpSum([x[j][i] for i in set_trucks]) == 1
for i in set_trucks:
# Respect the mass constraint of trucks
prob += lpSum([item_mass[j] * x[j][i] for j in set_items]) <= truck_mass[i]*y[i]
# Respect the volume constraint of trucks
prob += lpSum([item_vol[j] * x[j][i] for j in set_items]) <= truck_vol[i]*y[i]
# Ensure y variables have to be set to make use of x variables:
for j in set_items:
for i in set_trucks:
x[j][i] <= y[i]
s = id_series # id_series
prob.solve()
是不是我做错了什么?
这是 jupyter 笔记本和测试文件的 link。
【问题讨论】:
-
你用的是什么求解器?我会尝试的第一件事是使用更好的求解器。
-
我使用了 PulP 求解器
-
你错了。 PuLP 不是求解器。它是一种可以使用不同求解器的建模工具。请参阅文档。
-
请原谅我,但我对此很陌生。我已经附上了代码,你能看看并帮忙吗?
-
@ErwinKalvelagen 我检查了求解器,上面写着
* Solver <class 'pulp.solvers.PULP_CBC_CMD'> passed. Solver <class 'pulp.solvers.CPLEX_DLL'> unavailable Solver <class 'pulp.solvers.CPLEX_CMD'> unavailable Solver <class 'pulp.solvers.CPLEX_PY'> unavailable Solver <class 'pulp.solvers.COIN_CMD'> unavailable Solver <class 'pulp.solvers.COINMP_DLL'> unavailable Solver <class 'pulp.solvers.GLPK_CMD'> unavailable Solver <class 'pulp.solvers.XPRESS'> unavailable Solver <class 'pulp.solvers.GUROBI'> unavailable Solver <class 'pulp.solvers.GUROBI_CMD'> unavailable
标签: python linear-algebra linear-programming pulp