您好,欢迎访问三七文档
选修课策略问题某学校规定,运筹学专业的学生毕业时必须至少学习过两门数学课、三门运筹学课和两门计算机课。这些课程的编号、名称、学分、所属类别和先修课要求如表1所示。那么,毕业时学生最少可以学习这些课程中哪些课程。如果某个学生既希望选修课程的数量少,又希望所获得的学分多,他可以选修哪些课程?表1课程情况课程编号课程名称学分所属类别先修课要求1微积分5数学2线性代数4数学3最优化方法4数学;运筹学微积分;线性代数4数据结构3数学;计算机计算机编程5应用统计4数学;运筹学微积分;线性代数6计算机模拟3计算机;运筹学计算机编程7计算机编程2计算机8预测理论2运筹学应用统计9数学实验3运筹学;计算机微积分;线性代数模型的建立1不考虑学分情形:记i=1,2,…,9表示9门课程的编号。设1ix表示第i门课程选修,0ix表示第i门课程不选。问题的目标为选修的课程总数最少,即91miniiZx约束条件包括两个方面:第一方面是课程数量的约束:每个人最少要学习2门数学课,则123452xxxxx每个人最少要学习3门运筹学课,则356893xxxxx每个人最少要学习2门计算机课,则有:46792xxxx第二方面是先修课程的关系约束:如“数据结构”的先修课程是“计算机编程”,这意味着如果14x,必须17x,这个条件可以表示为74xx(注意当04x时对7x没有限制)。这样,所有课程的先修课要求可表为如下的约束“最优化方法”的先修课是“微积分”和“线性代数”,有:2313,xxxx“数据结构”的先修课程是“计算机编程”,有:47xx“应用统计”的先修课是“微积分”和“线性代数”,有:5152,xxxx“计算机模拟”的先修课程是“计算机编程”,有:67xx“预测理论”的先修课程是“应用统计”,有:85xx“数学实验”是“微积分”和“线性代数”,有:9192,xxxx这样一来,总的0-1规划模型为:91miniiZx12345356894679313247515267859192129232,..,,,,,01xxxxxxxxxxxxxxxxxxxxstxxxxxxxxxxxxxxx或解得:1236791,1,1,1,1,1xxxxxx。即选修课程为:微积分,线性代数.最优化方法,计算机模拟,计算机编程,数学实验。LINGO程序为:model:sets:item/1..9/:c,x;endsetsdata:c=5,4,4,3,4,3,2,2,3;enddatamin=@sum(item(i):x(i));!课程最少;x(1)+x(2)+x(3)+x(4)+x(5)=2;x(3)+x(5)+x(6)+x(8)+x(9)=3;x(4)+x(6)+x(7)+x(9)=2;x(3)=x(1);x(3)=x(2);x(4)=x(7);x(5)=x(1);x(5)=x(2);x(6)=x(7);x(8)=x(5);x(9)=x(1);x(9)=x(2);@for(item(i):@bin(x(i)));end2考虑学分情形:当要求学分最多时,设各门课程学分为ic,则增加学分最大的目标函数为:91maxiiiZcx这样总的双目标0-1规划模型为:911miniiZx921maxiiiZcx12345356894679313247515267859192129232,..,,,,,01xxxxxxxxxxxxxxxxxxxxstxxxxxxxxxxxxxxx或当把选修课程指定为6门时,对学分最大求最优,解得:1235791,1,1,1,1,1xxxxxx。最大学分为z=22。即选修课程为:微积分,线性代数.最优化方法,应用统计,计算机编程,数学实验。学分达到22分。LINGO程序为:model:sets:item/1..9/:c,x;endsetsdata:c=5,4,4,3,4,3,2,2,3;enddatamax=@sum(item(i):c(i)*x(i));@sum(item(i):x(i))=6;!课程为6门;x(1)+x(2)+x(3)+x(4)+x(5)=2;x(3)+x(5)+x(6)+x(8)+x(9)=3;x(4)+x(6)+x(7)+x(9)=2;x(3)=x(1);x(3)=x(2);x(4)=x(7);x(5)=x(1);x(5)=x(2);x(6)=x(7);x(8)=x(5);x(9)=x(1);x(9)=x(2);@for(item(i):@bin(x(i)));end
本文标题:选修课策略问题
链接地址:https://www.777doc.com/doc-4255220 .html