我正在尝试使用LP解算器和AMPL(.mod)作为语言来构建约束优化模型。
上下文是一个工厂,它接收多个订单,然后在生产过程中经过多个机器(操作)。
订单中的操作受每台机器的每日最大容量限制。
目标是每天接受尽可能多的订单,以最大限度地提高机器的容量。
我的代码如下所示:
set orders;
param machines;
param Planning_period;
var order_accepted{t in 1..Planning_period,o in orders} >= 0 binary;
var order_operation_capacity_optimized > 0;
maximize capacity: sum{t in 1..Planning_period, o in orders, m in 1..machines} order_operation_capacity_optimized[t,o,m];
s.t. Available_capacity_per_day{t in 1..Planning_period, m in 1..machines}: sum{o in orders} order_operation_capacity_optimized[t,o,m] <= machine_capacity[m];
s.t. Needed_capacity_per_operation{t in 1..Planning_period, o in orders, m in 1..machines}:order_operation_capacity_optimized[t,o,m] = capacities_reqd_per_order[o,m]*order_accepted[t,o];
s.t. Operation_completed_1{t in 1..Planning_period, o in orders, m in 1..machines}: order_operation_capacity_optimized[t,o,m] >= capacities_reqd_per_order[o,m];
s.t. Operation_completed_2{t in 1..Planning_period, o in orders, m in 1..machines}: order_operation_capacity_optimized[t,o,m] <= capacities_reqd_per_order[o,m]*operation_completed[t,o,m];
s.t. Precedence_restriction{t in 1..Planning_period, o in orders, m in 2..machines}: sum{tt in 1..t-1} order_operation_capacity_optimized[t,o,m-1] + order_operation_capacity_optimized[t,o,m-1] >= capacities_reqd_per_order[o,m-1]*operation_completed[t,o,m];
我的数据如下:
data;
set orders := order_1 order_2 order_3;
param machines := 4;
param Planning_period := 3;
param machine_capacity:= 1 10
2 20
3 25
4 15;
param capacities_reqd_per_order: 1 2 3 4 :=
order_1 7 6 4 3
order_2 4 1 3 2
order_3 2 1 5 2;
代码运行时没有错误,但没有预期的结果。
结果输出为:
如上所示,该模型在整个计划期间复制time_1的结果。 我希望它在time_1处理order_1和order_3后,在time_2中接受订单2。
如何更正此复制?
对于这篇长篇文章感到抱歉,尽量给予尽可能多的清晰度。
如果有人可以指导我的话,我愿意在R中编写代码。
我添加了约束来对每个订单的操作施加优先级限制。