作业帮 > 数学 > 作业

lingo解决带时间窗的车辆路径优化问题得不到最优解,请问有什么解决方案么

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:数学作业 时间:2024/05/29 14:30:51
lingo解决带时间窗的车辆路径优化问题得不到最优解,请问有什么解决方案么

                                               

MODEL:

!定义原始级和派生级;

sets:

    points/o,1,2,3,4,5,6,7,8/:f;

    point_aim/1..8/:timea,timeb,q,s;

    roads(points,points):dist,x1,time_between;

    cars/1..3/;

    reach/0 1 2 3 4 5 6 7 8/:time_reach;

    road_car(roads,cars):x;

    task_car(points,cars):y;

    task_aim(point_aim,cars):y1;

   

endsets

!数据输入;

data:

dist=0 40 60 75 90 200 100 160 80

     40 0 65 40 100 50 75 110 100

     60 65 0 75 100 100 75 75 75

     75 40 75 0 100 50 90 90 150

     90 100 100 100 0 100 75 75 100

     200 50 100 50 100 0 70 90 75

     100 75 75 90 75 70 0 70 100

     160 110 75 90 75 90 70 0 100 

     80 100 75 150 100 75 100 100 0;

m=3;

timea=1 4 1 4 3 2 5 1.5;

timeb=4 6 2 7 5.5 2.5 8 4;

q=2 1.5 4.5 3 1.5 4 2.5 3;

s=1 2 1 3 2 2.5 3 0.8;

capacity=8;

time_between=0 0.8 1.2 1.5 1.8 4 2 3.2 1.6

             0.8 0 1.3 0.8 2 1 1.5 2.2 2

             1.2 1.3 0 1.5 2 2 1.5 1.5 1.5

             1.5 0.8 1.5 0 2 1 1.8 1.8 3

             1.8 2 2 2 0 2 1.5 1.5 2

             4 1 2 1 2 0 1.4 1.8 1.5

             2 1.5 1.5 1.8 1.5 1.4 0 1.4 2

             3.2 2.2 1.5 1.8 1.5 1.8 1.4 0 2

             1.6 2 1.5 3 2 1.5 2 2 0;

enddata

!目标函数;

min=@sum(roads(i,j):

               dist(i,j)* @sum(cars(k):x(i,j,k)));

!定义x为0,1变量;

@for(road_car:@bin(x));

!定义y为0,1变量;

@for(task_car:@bin(y));

@for(task_aim:@bin(y1));

!约束条件;

!约束一:表示k承担的任务量之和不大于车的容量;

@sum(point_aim(i):

                  q(i)*@sum(cars(k)|k#eq#1:

                                           y1(i,k)))<=capacity;

@sum(point_aim(i):

                 q(i)*@sum(cars(k)|k#eq#2:

                                           y1(i,k)))<=capacity;

@sum(point_aim(i):

                 q(i)*@sum(cars(k)|k#eq#3:

                                           y1(i,k)))<=capacity;

!约束二:表示任务i只能由一辆车完成;

@for(point_aim(i):

                 @sum(cars(k):

                            y1(i,k))=1);

!约束三:表示由中心仓库0出发m辆车;

@sum(task_car(i,k)|i#eq#1:y(i,k))=m;

!约束四:表示每个客户点只有一辆车访问;

@for(points(j)|j#ne#1:

                     @sum(points(i):

                                    @sum(cars(k):x(i,j,k)))=1);

!约束五:保证进入和离开一客户点的车辆数相同;

@for(points(p):

              @sum(points(i)|i#eq#p:

                                    @sum(cars(k):

                                                 x(i,p,k)))=1;

              @sum(points(j)|j#ne#p:

                                    @sum(cars(k):

                                                 x(p,j,k)))=1;

             );

!约束六:时间约束;

@for(reach(i):time_reach(i)>@sum(point_aim(i):timea(i)));

@for(reach(j):time_reach(j)<@sum(point_aim(j):timea(j)));

end

运行之后得不到最优解,

lingo解决带时间窗的车辆路径优化问题得不到最优解,请问有什么解决方案么
估计是你写的约束有矛盾 你自己好好检查一下
约束16 你lingo里面表达的和你模型里面好像不一致
再问: 程序运行结果中也没有Reduced Cost,是不是设置上出了什么问题
再答: 你先能解出来再说好不 而且你要的是最优解还是reduced cost?
再问: 16对应约束一,三辆车,每辆车需要经过的地点的货物需求的和小于总的装载量,是对的
再答: 跟你写的不一致 我没说约束不对好吗
再问: 好吧,是不一致...目前还是不知道有什么错误
再答: 不一致的话自己想想是不是矛盾好吗 我不可能把你的问题完整看一遍再给你想每一句是不是有矛盾 那样要费多少时间
再问: 好高冷...
再答: 随便你 本来就是你自己的事 不爱想我更不爱想 嫌我高冷你找别人去 看谁帮你
再问: 我用排除法发现约束3和约束4之间是有问题的,把它们删掉之后可以得出最优解,但是找不到它们的矛盾点
再答: 你的y除了那一句还在别的地方出现过吗? 反正我觉得很奇怪

包括你写的句子也很奇怪

不要非得每句都有@for 你有的地方下标确定了就直接写下标好了