选课策略——0-1整数规划

Github个人博客

选课策略

问题重述

已知某年数学与统计学院课程结构如图所示。要求至少选两门数学课、三门运筹学课和两门计算机课。

课程结构

  1. 为了选修课程总数最少,应学习哪些课程?
  2. 选修课程最少,且学分尽量多,应学习哪些课程?

选修课程总数最少

问题分析

分析上图可知,所属类别为两门的课程均有先修课程要求,可只选择基础课程又达不到课程结业要求。易知基础课程(微积分、线性代数、计算机编程)为必修课程,问题的关键在于如何在已修课程的基础上合理的选择多类别课程。

模型的建立

设 0-1 变量 d i , i = 1 , 2 , ⋯   , 9 d_i,i=1,2,\cdots ,9 di,i=1,2,,9 表示是否选择课程 i i i 。如 d 5 = 1 d_5=1 d5=1 表示选择了应用统计这门课。为完成结业要求与先修课机制,有以下约束条件:

  1. 由最低课程数目标准知:


    KaTeX parse error: No such environment: align at position 9: \begin{̲a̲l̲i̲g̲n̲}̲ d_1+d_2+d_3+d_…

  2. 由先修课机制知:


    KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ d_6 &\le d_7…

记不等式约束矩阵为 A A A ,约束向量为 b b b ,则可建立优化模型

KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \min \quad S=&…

问题求解

使用 Matlab 的 intlinprog 进行求解得, d 1 = d 2 = d 3 = d 6 = d 7 = d 9 = 1 d_1=d_2=d_3=d_6=d_7=d_9=1 d1=d2=d3=d6=d7=d9=1 ,亦即为了选择课程总数最少,应该学习微积分、线性代数、最优化方法、计算机模拟、计算机编程、数学实验这 6 门课程。

课程数最少且学分尽量多

问题分析

此问题为一个多目标优化问题,但是要求选修课程最少,由 上述模型知必须在只能选 6 门课程的前提下使得学分尽可能大。

模型的改进

由题意知,只需在上述模型中增加一个等式约束

∑ i = 1 9 d i = 6 \sum_{i=1}^9d_i=6 i=19di=6

并将优化函数改为最大化总学分即可,优化模型如下

KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \max \quad S^{…

其中 s i s_i si 表示每一项课程对应的学分。

模型的求解

利用 Matlab 易得结果得 d 1 = d 2 = d 3 = d 5 = d 6 = d 7 = 1 d_1=d_2=d_3=d_5=d_6=d_7=1 d1=d2=d3=d5=d6=d7=1,亦即应该选择微积分、线性代数、最优化方法、应用统计、计算机模拟、计算机编程这 6 门课程,并且可以达到 22 分的学分。较第 1 部分中的 21 分 更优。

总结

上述模型说明了整数规划的最优解并不一定是唯一的,模型 2 正是在模型 1 的最优解空间中进一步搜索从而得到同时还满足极大化总学分的理想解。事实上模型 2 的最优解解也不唯一,如还可以选择课程 1,2,3,5,7,9 。

程序源代码

最小化课程数目
clear,clc;
%% function
f=ones(1,9);
%% Inequality constraints
A=[-1,-1,-1,-1,-1,0,0,0,0;
    0,0,-1,0,-1,-1,0,-1,-1;
    0,0,0,-1,0,-1,-1,0,-1;
    0,0,0,0,0,1,-1,0,0;
    0,0,0,0,-1,0,0,1,0;
    0,0,0,1,0,0,-1,0,0;
    -1,-1,2,0,0,0,0,0,0;
    -1,-1,0,0,2,0,0,0,0;
    -1,-1,0,0,0,0,0,0,2;];
b=[-2,-3,-2,0,0,0,0,0,0]';
Aeq=[];
beq=[];
intcon=1:9;
%% solve
x=intlinprog(f,intcon,A,b,Aeq,beq,zeros(9,1),ones(9,1))
最小课程数目,极大化总学分
clear,clc;
xuefen_1=[5,4,4,3,4,3,2,2,3];
%% function
f=-ones(1,9).*xuefen_1;
A=[-1,-1,-1,-1,-1,0,0,0,0;
    0,0,-1,0,-1,-1,0,-1,-1;
    0,0,0,-1,0,-1,-1,0,-1;
    0,0,0,0,0,1,-1,0,0;
    0,0,0,0,-1,0,0,1,0;
    0,0,0,1,0,0,-1,0,0;
    -1,-1,2,0,0,0,0,0,0;
    -1,-1,0,0,2,0,0,0,0;
    -1,-1,0,0,0,0,0,0,2;];
b=[-2,-3,-2,0,0,0,0,0,0]';
%% Equality constraints
Aeq=ones(1,9);
beq=6; % the minimum number of courses
intcon=1:9;
[x,fval]=intlinprog(f,intcon,A,b,Aeq,beq,zeros(9,1),ones(9,1))
  • 23
    点赞
  • 140
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
设计学生选课系统,可以按照以下要求实现: 1. 创建一个登录界面,显示如下内容: ``` ----------------------------欢迎使用学生选课系统------------------------------ * 1、学生身份登录系统 * * 2、教师身份登录系统 * * 3、退出学生选课系统 * ---------------------------------------------------------------------------------------- ``` 2. 根据用户的选择,进入不同的登录流程: - 选择 1,进入学生身份登录系统; - 选择 2,进入教师身份登录系统; - 选择 3,退出学生选课系统。 3. 学生身份登录系统: - 要求学生输入用户名和密码进行身份验证; - 验证通过后,显示如下内容: ``` ----------------------------学生选课系统---------------------------- * 1、选课 * * 2、退课 * * 3、查看已选课程 * * 4、退出学生选课系统 * -------------------------------------------------------------------- ``` - 根据用户的选择,进入不同的功能模块: - 选择 1,进入选课流程,可以选择课程进行选课- 选择 2,进入退课流程,可以选择已选课程进行退课; - 选择 3,查看已选课程的信息; - 选择 4,退出学生选课系统。 4. 教师身份登录系统: - 要求教师输入用户名和密码进行身份验证; - 验证通过后,显示如下内容: ``` ----------------------------教师管理系统---------------------------- * 1、添加课程 * * 2、删除课程 * * 3、查看课程信息 * * 4、退出教师管理系统 * -------------------------------------------------------------------- ``` - 根据用户的选择,进入不同的功能模块: - 选择 1,进入添加课程流程,可以添加新的课程; - 选择 2,进入删除课程流程,可以删除已有的课程; - 选择 3,查看课程信息; - 选择 4,退出教师管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值