李丽容

(武汉学院信息工程学院,湖北 武汉 430212)

0 引言

文献[1]中例题:混合泳队接力赛选拔方案采用Lingo软件求解,下面笔者采用Matlab优化工具箱中的intlinprog函数求解,并将其同Lingo软件求解结果进行比较,分析这两种目前学生最常用的软件求解方案各自的特点及实用性,便于学生在求解过程中进行合适的选择。

题目:某泳队要从5个人中选4人参加4100米混合泳接力赛,5名候选人百米成绩见表1:

表1 5名候选人的百米成绩

请根据以上表格给出的数据,建立数学模型,解决下面问题:

(1)怎样选拔组成4100米混合泳接力队?

(2)甲的仰泳成绩进步到1'05''4,丁的蛙泳成绩退步到1'15''2,戊的自由泳成绩进步到54''5,组成接力队的方案需要调整吗?应该怎样调整?

1 问题分析及模型的建立

1.1 问题分析

该问题是比较常见的0-1型整数规划问题,在日常生活安排和企业生产管理工作中,常常要给人分派工作或给机器指派任务等,我们一般把这类问题也叫指派问题。它是最优化问题的一种,它的问题模型是给个人(人泛指可以执行任务的一切物体)指派完成项任务,并通过每个人完成每件任务的工作效率来研究如何分配任务资源,使完成任务所消耗的总资源最少或总利润最大。因决策变量只有0和1两种取值,在问题讨论时,通常把某个人是否执行某项任务取值为1和0,从而建立一般指派问题的0-1规划模型。

1.2 模型的建立

2 用Matlab优化工具箱中函数求解整数规划模型

Matlab作为一款非常强大的科学计算软件,在能够自己编写程序的同时,也可以利用其工具箱中已有的函数进行求解,比如Matlab优化工具箱中提供了各种优化问题的求解函数,线性规划linprog函数,二次规划quadprog函数等等。

但对于整数规划,并不能简单地把已得的非整数解舍入化整就可以了,因为化整后的数不一定是可行解和最优解,应该用特殊的方法来求解整数规划,因此就有很多学者探寻出各种不同的方法,以前Matlab是不能直接求解这类规划的,bintprog函数只可以用来求0-1整数规划,求解过程比较麻烦,而且bintprog在2014b中就取消了,官方建议用intlinprog代替,intlinprog是2014a引入的函数,是一个比较新的、专用于求解各类整数线性规划包括0-1整数规划,也可用于求解混合整数线性规划问题。其标准模型为:

绿色建筑工程造价成本的预估是在项目建设前期进行招投标环节进行的,主要是预测在项目建成所需要花费的费用,这是建筑项目能够保质保量顺利建成的重要参考标准。绿色建筑工程的造价成本需要考虑一定的精确性,与此同时,还需要兼顾成本造价的速度。对于招投标环节来说,造价成本的预估速度和精确度直接影响了投标单位能否顺利中标。工程造价估算成本的重要意义体现在以下几个方面:

该函数的使用仅仅是在linprog函数的基础上多加了一个参数──intcon,用来约束整数变量的位置,和线性规划函数linprog函数的使用很相似。例如:

改写模型成标准形式如下:

于是,调用Matlab优化工具箱中intlinprog函数,其代码可写为:

Matlab优化工具箱中的优化函数都要求目标函数值最小,如果优化问题要求目标函数值最大,可使该目标函数的负值最小化来达到目的;缺省的条件用[]来替代。

下面调用Matlab优化工具箱中intlinprog函数求解文献[1]中混合泳接力选拔问题:

为了计算方便,先将所有队员各种泳姿的百米成绩进行换算,以秒为单位,有下面表2:

表2 cij(秒)队员i第j种泳姿的百米成绩

为了将模型改写成标准形式,将20个0-1决策变量按表2中从上至下,从左至右顺序改成于是用intlinprog函数求解混合泳接力选拔的,须先将模型改写成标准形式:

由于维数比较大,这里采用kron函数将矩阵A写成:A=kron(eye(5),ones(1,4)),b是由5个1构成的列向量。

于是,混合泳接力选拔模型的代码可写为:

从结果可以看到x4,x5,x10,x15=1,即被选。

表3 5名候选人被选中的4人及相应泳姿

3 模型结果分析及比较

比较Matlab优化工具箱中intlinprog函数相较Matlab2014a版之前的bintprog函数只能求解0-1整数规划类问题,它实用性更广,它可以求解一般整数规划问题,还可以解决0-1整数规划问题,只要在求解整数规划的基础上加上一个对变量最大值约束为1就行了;还可以求解混合整数规划类问题,只需用参数intcon说明整数约束变量的位置即可。另外,该函数有非常固定的标准模型,学生只需要将一般模型转化成标准模型,然后编写成代码即可求解,且结果还比较可靠,计算的精度也很高,避免了应用其他语言程序过于复杂、调试困难等这样的缺点,提高了计算效果,学起来也比较容易,操作也很方便,比较适合初学的同学。

4 结语

针对混合泳队接力赛选拔方案这一类0-1整数规划问题,也叫做指派问题,就是很多项任务指派给一些候选人来完成,每人的专长不同,完成每项任务取得的效益或需要的资源也不同,怎样分派任务使获得的总效益最大,或付出的总资源最少;或者很多种策略可以供选择,各种不同策略得到的收益或付出的成本不同,每个策略之间有相互制约关系,怎样在满足一定条件下作出抉择,使得收益最大或成本最小。这些都可以建立相同的数学模型,根据具体要求对约束条件作简单变化,即得相应模型,由此都能采用Matlab中intlinprog函数来求解。笔者在讲解这一类型时,引导学生进行归纳总结,反复练习,对该函数的固定的模型熟练转化为标准模型,然后编写成代码进行求解。通过同类型题目练习,结果表明:intlinprog函数求解这一类问题简单易学,易于理解掌握,优于其他函数。