【发布时间】:2013-07-12 19:34:45
【问题描述】:
我正在尝试使用 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 没有走上正轨,我该如何正确设置约束来解决问题?
请注意,我为每个变量填写了一个表格,其中包含适当的类别和数据点
编辑以反映以下 cmets:
总共需要测量 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
该模型不能改变今年传感器类型的构成,但是它应该能够为未来几年充分建模。这意味着包括更换成本等,以获得更好的传感器并降低总体成本。
单位可以互换。
【问题讨论】:
-
您已经很好地涵盖了成本要素,但我认为我们遗漏了一些信息。每年需要多少次曝光(测量)?任何类型的传感器都可以分配给任何测量吗?一旦你把
decision variables搞清楚了,公式就会变得容易得多。 -
@RamNarasimhan 我将获得当前的实际曝光和未来年份曝光的建模结果,这意味着我会知道在传感器类型下,位置将有 x 个读数等等。对于分配用于测量的当年传感器不能改变;但是,它们可以在未来几年改变
-
你能更新你的问题定义吗?有多少个地点?是否需要使用所有 1500 个 C 型传感器?这三种类型可以互换吗?预计每年有多少次曝光?我们需要这些来制定 LP。
-
@RamNarasimhan 我刚刚更新了问题
标签: python linear-programming equation-solving temporal pulp