我正在尝试使用 PuLP 解决假设的线性问题。该问题旨在最大限度地降低 5 年内的运营成本,同时最大限度地提高产品形状和条件。该问题必须产生5个成本,每年一个,同时优化整个系统和每年的运营。
total_cost = [(var_cost[year] + fix_cost[year] + cost_new_sensors[year]) for year in range(0,5)]
这total_cost
涉及维护三种类型的传感器:
# units price_new fixed_cost_per_unit_per_yr variable_costs_pr_yr_pr_unit
sensor_type_a 300 $50 rent + insurance power + maint
sensor_type_b 900 $75 rent + insurance power + maint
sensor_type_c 1500 $90 maint + insurance -
- 问题必须考虑到,每年,传感器的状态都比前一年好,并且不能超过 12% 的传感器的状态为
"Very poor"
. - 如果曝光不高,系统应该能够用另一种类型的传感器替换或降级购买新的传感器。(此声明与本帖无关)
对于sensor_type_a
:
- 固定成本:
- 每单位 1 至 5 年的租金为
[50, 55, 55, 55, 60]
- 第 1 年至第 5 年的每单位保险为
[ 1.0, 1.2, 1.2, 1.8, 2.0]
- 每单位 1 至 5 年的租金为
- 可变成本:
- 功率基于传感器测量的项目数:
10+.05*each_measurement
。价格每年上涨1% - 维护是基于
$500 for the total number of sensors + each_measurement*2.45
. 价格每年上涨2%
- 功率基于传感器测量的项目数:
- 曝光指数指示每个传感器的状态,并基于下表:
_
exposure(# of measurements) category
<=100 excellent
250 good
400 poor
>=400 very poor
对于sensor_type_b
:
- 固定成本:
- 每单位 1 至 5 年的租金为
[60, 65, 65, 70, 75]
- 第 1 年至第 5 年的每单位保险为
[ 1.1, 1.3, 1.4, 1.7, 2.0]
- 每单位 1 至 5 年的租金为
- 可变成本:
- 功率基于传感器测量的项目数:
10+.08*each_measurement
。价格每年上涨1% - 维护是基于
$500 for the total number of sensors + each_measurement*2.65
. 价格每年上涨1.5%
- 功率基于传感器测量的项目数:
- 曝光指数表示每个传感器的状态,基于下表:
_
exposure(# of measurements) category
<=200 excellent
350 good
500 poor
>=500 very poor
对于sensor_type_c
:
- 固定成本:
- 1 至 5 年所有单元的维护是
[5000, 5100, 5200, 5300, 5400]
- 第 1 年至第 5 年的每单位保险为
[ 1.1, 1.3, 1.4, 1.7, 2.0]
- 1 至 5 年所有单元的维护是
- 曝光指数表示每个传感器的状态,基于下表:
_
exposure(# of measurements) category
<=300 excellent
450 good
600 poor
>=600 very poor
我的目标函数/方程是最小化之一:
problem = pulp.LpProblem(’Cost Minimization’, pulp.LpMinimize)
我的限制:
我在设置约束函数时遇到了麻烦。这是我在概念上想做的事情(伪和python的混合):
problem += sum([fixed_costs[yr][a] + var_costs[yr][a]
for a in sensor_type_a
for yr in years])
problem += sum([fixed_costs[yr][b] + var_costs[yr][b]
for a in sensor_type_b
for yr in years])
problem += sum([fixed_costs[yr][c] + var_costs[yr][c]
for a in sensor_type_c
for yr in years])
problem += sum(sensor_type_[a].condition('very poor') + \
sensor_type_[b].condition('very poor') + \
sensor_type_[c].condition('very poor')) <= 12%
problem += sum(sensor_type_[a].average_condition(yr) + \
sensor_type_[b].average_condition(yr) + \
sensor_type_[c].average_condition(yr) >=
sensor_type_[a].average_condition(yr-1) + \
sensor_type_[b].average_condition(yr-1) + \
sensor_type_[c].average_condition(yr-1)
问题:
如果我的伪+python 没有走上正轨,我该如何正确设置约束来解决问题?
请注意,我为每个变量填写的每个项目都有一个表格,其中包含适当的类别和数据点
编辑以反映以下评论:
总共有 2,700 个单元或位置需要测量。我有以下性质的表:
unit_ID actual_2013 forecasted_2014 forecasted_2015 forecasted_2016 forecasted_2017
1 25 30 40 35 50
2 400 430 460 480 50
n x_1 x_2 x_3 x_4 x_5
该模型不能改变今年传感器类型的构成,但它应该能够为未来几年充分建模。这意味着包括更换成本等,以获得更好的传感器并降低总体成本。
单位可以互换。