选课策略——0-1整数规划
Github个人博客
选课策略
问题重述
已知某年数学与统计学院课程结构如图所示。要求至少选两门数学课、三门运筹学课和两门计算机课。
- 为了选修课程总数最少,应学习哪些课程?
- 选修课程最少,且学分尽量多,应学习哪些课程?
选修课程总数最少
问题分析
分析上图可知,所属类别为两门的课程均有先修课程要求,可只选择基础课程又达不到课程结业要求。易知基础课程(微积分、线性代数、计算机编程)为必修课程,问题的关键在于如何在已修课程的基础上合理的选择多类别课程。
模型的建立
设 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 表示选择了应用统计这门课。为完成结业要求与先修课机制,有以下约束条件:
由最低课程数目标准知:
KaTeX parse error: No such environment: align at position 9: \begin{̲a̲l̲i̲g̲n̲}̲ d_1+d_2+d_3+d_…
由先修课机制知:
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=1∑9di=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))
选课策略——0-1整数规划相关推荐
- SpringBoot+Vue项目学生选课系统
文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclip ...
- 基于php语言的 选课系统,基于C语言实现学生选课系统
鉴于C语言实现的通讯录,为了巩固C语言的基础知识,试着写一个简单的学生选课系统. 思路比较简单: 1.回滚显示各种提示信息或操作信息 2.链表操作. 代码中有管理员部分功能没有实现,学生和老师的功能基 ...
- 推荐CUDA程序优化的15个策略
推荐CUDA程序优化的15个策略 0条评论 2011-07-06 09:48 来源:潇湘学子岳麓生的博客 作者: 潇湘学子岳麓生 编辑: 王玉圆 [IT168 技术]在<CUDA程序优化策略 ...
- 4.4 IPv6(诞生原因、数据报格式、与IPv4的不同、地址表现形式、基本地址类型、IPv6与IPv4的过渡策略)
文章目录 0.思维导图 1.为什么要有IPV6? 2.IPV6的数据报格式 3.IPV6与IPV4的比较 4.IPV6的地址表示形式 5.IPV6基本地址类型 6.IPV6向IPV4过滤的策略 0.思 ...
- 整数规划matlab实例,整数规划matlab
整数规划matlabTag内容描述: 1.例已知非线性整数规划为max z=x12+x22+3x32+4x42+2x52-8x1-2x2-3x3-x4-2x5s.t.0xi99,i=1,2,5x1+x ...
- linux下c语言线程传参数,【linux】C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0...
C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0 本贴问题,之前已经提问过一次,当时已经解决了,原贴在这里https://segmentfault.com/q/1 ...
- 新浪的动态策略灰度发布系统:ABTestingGateway
原文链接:http://www.open-open.com/lib/view/open1439889185239.html ABTesingGateway 是一个可以动态设置分流策略的灰度发布系统,工 ...
- Linux环境下基于策略的路由
Linux环境下基于策略的路由 原文作者:Matthew G. Marsh 原文出处:[url]http://www.sysadminmag.com/linux/articles/v09/i01/a3 ...
- 基于C语言的学生选课系统
鉴于C语言实现的通讯录,为了巩固C语言的基础知识,试着写一个简单的学生选课系统. 思路比较简单: 1.回滚显示各种提示信息或操作信息 2.链表操作. 代码中有管理员部分功能没有实现,学生和老师的功能基 ...
最新文章
- [转载]以及部分总结--Linux下创建单机ASM存储的Oracle实例的过程---感谢方总
- POJ 2155 Matrix 二维线段树
- XGBoost:Python下 安装
- 0119——UITextField
- 分布式机器学习框架:MxNet
- linux刷除U盘grub,删除linux系统出现grub rescue
- 线程间通信————同步
- 跟我极速尝鲜 Spring Boot 2.3
- SQL Server 2008 事件探查器(SQL SERVER Profiler)
- mipi协议_Cadence发布业界首款面向多协议PHY的验证IP产品
- 计算机专业考研学习,计算机专业考研133分复习经验谈
- python2.0 s12 day4
- jQuery常用操作部分总结
- 关于达梦监视器dmmonitor的一些知识
- multisim 9013、8050免费下载
- 您的计算机性能不足 无法运行,绝地求生进不去游戏提示运行引擎需要DX11特性等级10.0,大神救我,刚做的系统W10 64位的,游戏也是刚下的...
- asp.net 将bmp格式图片怎么转换为jpg_如何把jpeg转换成jpg?分享两种jpeg转换jpg的方法...
- 【言简意赅】聊聊DAS、NAS、SAN三种存储方式
- 情感分析textblob--英文分析
- 什么是arXiv.org?
热门文章
- 石头机器人拖地水量调节_石头扫地机器人T7系列APP有这些小技巧
- 量子化学--分子动力学
- 集成友盟QQ授权登录,在调试时出现非官方应用...100044解决方案
- 4D打印裙问世!未来可订制专属你的裙子
- 上才艺——win32搞一个拼图游戏
- python中x[:],x[:-1],x[:,]x[:,-1]等操作含义解析
- 超市管理c语言程序,《C语言 超市管理系统源程序》.doc
- matlab中randperm函数
- MYSQl逻辑运算符(与运算、或运算、非运算、异或运算)
- c语言快速排序代码不用函数,C语言 快速排序函数