2017年D题优秀论文再现

从今天起我们队伍开始正式准备国赛啦,今天队伍学习的第一篇是 2017年D题:巡检线路的排班

这样的生产调度问题会使用到规划模型,那么就要按照规划模型的组成,确定优化目标,从而确定模型的目标函数和约束条件

优化目标:

1. 每一班人员数量尽可能少。  原论文的处理是:所用工人最少,其实就是完成巡检任务所用时间之和最小。将其写为目标函数。

2.每位工作人员的工作时间应该平均。论文将工作人员的工作时间差异控制在10分钟以内,将其写为约束条件。全文的基本思路是这样的:

整个调度的核心是对工作人员巡检的场所进行调度,即哪个人应该巡检哪个地方,我们很容易看出这是一个指派问题,采用0-1规划。

那么巡检的路线怎么确定?当我们通过上一步得到对工作人员的场所分派后,我们再按照最短路(无向加权路)算法来确定巡检路线。

当我们确定好巡检路线后,巡检时间表也就确定了。由此我们可以总结出:对于复杂调度模型,我们可以挖掘调度的各个方面,找到核心调度,然后以此为基础,递进式的解决其他调度任务。

然后文章的细节部分我就不讲了,这里就给大家勾个轮廓,想看文章的在这里(积分我设置为0了,大家可以自由下载):

 2017年国赛D题优秀论文-其它文档类资源-CSDN文库

我主要讲讲我是怎么复现代码的:我的复现过程模拟了一下它的数据与约束条件,能够跑通,若欲完全复现修改添加真实数据即可。

注释中提到的处理关系:  matrix\left( i,j \right) =x\left( l\cdot \left( i-1 \right) +j \right) , i,j的起始索引为1。

test=randi(7,5,5);
constte=randi(7,5,5);
% test和constte都是模拟论文中的稀疏矩阵

x = optimvar('x',15,1,'Type','integer','LowerBound',0,'UpperBound',1);
% 在我的假设下,一共有3位工作人员,5个巡检点

obj = fcn2optimexpr(@objfunx,x,test);
%由于是目标函数和约束条件都不是基本初等函数,在写进模型之前需要用fcn2optimexp函数转化为优化表达

prob = optimproblem('Objective',obj,'ObjectiveSense','max');

%我这里约束条件只写了一组,只是示范用
con1=fcn2optimexpr(@cons_fun,x,2,constte)
prob.Constraints.cons1=con1>=4;
prob.Constraints.cons1=con1<=9;

x0.x =zeros(15,1);  %%在使用solve函数求解模型之前,需指定x的初始值,否则报错
[sol,fval,exitflag,output] = solve(prob,x0)
fval
sol



function f = objfunx(x,test)
sum=0;
for k=1:3
    for i=1:5
        for j=1:5
            sum=sum+test(i,j)*x(5*(k-1)+j)*x(5*(k-1)+i);  %%这里有一个将二维坐标处理成一维 
                                                          %%索引的处理
        end
    end
end
     f=sum;       
end

function f = cons_fun(x,k,constte)  %%k代表第几个工作人员
k=1;
sum=0;
    for i=1:4
        for j=1:4
            sum=sum+constte(i,j)*x(5*(k-1)+j)*x(5*(k-1)+i);
        end
    end
     f=sum;       
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值