当前位置: 首页>編程日記>正文

matlab线性规划系列之基础解题

matlab线性规划系列之基础解题




系列文章目录

基础篇:

1.matlab线性规划问题---------基于问题求解函数optimproblem

文章目录

  • 系列文章目录
  • 前言
  • 一、线性规划是什么?
  • 二、上手实际问题
    • 2.1 分类问题
    • 2.2 找对应三点
    • 2.3 代码实例




前言

这里将展示一些用我之前发过的关于问题求解函数optimproblem的一些解题方法思路,以及对应的代码,在这里声明一下,本篇文章所用的题目来自于哒哒子前辈的如下文章:数学建模【规划模型--线性规划(整数规划、0-1规划)、非线性规划-附:案例分析、奶制品的生产和销售(详细求解过程)】_厚德载物-CSDN博客



欢迎来到-苦幽幽,线性规划解千愁系列。


一、线性规划是什么?

  线性规划的内容其实分为很多我自己用思维导图零零散散的整理了一些(还没整理完,之后会慢慢补充),思维导图如下所示(在之后的文章会随着作者不断地学习纠错来更新),如果有误,欢迎读者指正 




二、上手实际问题

类型一:0-1模型的选课制度:

 

  线性规划问题就是抓住三个点即目标函数、约束条件以及决策变量。

2.1 分类问题

文字分析:

  关于这道题,首先是先将问题分类,毫无疑问,我们的选课要么选要么不选,所以不选是0,选就是1,是标准的0-1规划问题;

代码分析:

  0-1规划,也就是说,我们用optimproblem函数中的设置变量x需要设置范围,下限为0 ,上限是1,并且由于只有0、1两个值,所以我们还需要给它调整一下类型,也就是整型integer,同时因为有九门课,所以x是一个9行1列的列向量即x1、x2...x9,到这里,未知数的设定都了解了。代码如下所示。

x = optimvar('x',9,'Type','integer','LowerBound',0,'UpperBound',1);

2.2 找对应三点

文字分析:

那么接下来就找那三个点:

第一:决策变量,其实就是各个选修课程,九个不同的未知数代表气课程是否选;

第二:约束条件,约束条件是题目所给的最少两门数学课,三门统计学以及两门计算机课,在此条件下还需满足如:如果选择最优化方法的话,就需要先选择微积分和线性代数等前提条件;

第三:目标函数,目标函数就是要选修课程尽可能少。

代码分析:

1. 关于决策变量在上一个部分说过了,这里不再继续重复

2. 关于约束条件,约束条件不想看文字可看图,在下方!

  前面的最少两门数学课,三门统计学什么的很简单,就是把其中蕴含数学课的课程变量加起来不多于二,统计学的不多于三即可;后面的先选什么才能选什么,可能会要想一下,其实转换一下,就是还是以最优化方法x3为例的话,就是首先要选择微积分x1和线性代数x2,也就是说要x1>0和x2>0作为前提才行,但是你想,x的取值范围全是0-1,所以当x1和x2都选中的时候,它们的取值都为1,加起来就是2,那也就是说需要x1+x2=2的时候我才能选择是否选择x3,那如果用2*x3 - x1 -x2<=0,这样就刚好能满足了,因为刚好,我x3选择了的话就是取值为1,如果x1与x2都没有选择到的话,就都是0,那x3肯定也是0才能满足那个条件,而当x1和x2都选择的话,刚好是2,而如果选择了x3的话,前面则是2,相减也满足条件,所以是刚好的,其他的情况读者可以自行思考一下,也是大概的思路。所对应的约束条件图、思路图以及代码如下所示:

约束条件图
约束条件图片​​​

思路图

con1 = 2*x(3) - x(1) - x(2) <= 0;
con2 = x(4) - x(7) <= 0;
con3 = 2*x(5) - x(1) - x(2)<=0;
con4 = x(6) - x(7) <= 0;
con5 = x(8) - x(5) <= 0;
con6 = 2*x(9) - x(1) - x(2)<=0;
con7 = sum(x(1:5))>=2;
con8 = x(3)+x(5)+x(6)+x(8)+x(9)>=3;
con9 =  x(4)+x(6)+x(7)+x(9)>=2;
cons = [con1;con2;con3;con4;con5;con6];
cons2 = [con7;con8;con9];
pro.Constraints.con1=cons;
pro.Constraints.con2=cons2;

2.3 代码示例

clc
clear
tic
pro = optimproblem('ObjectiveSense','min');x = optimvar('x',9,'Type','integer','LowerBound',0,'UpperBound',1);pro.Objective = sum(x);
con1 = 2*x(3) - x(1) - x(2) <= 0;
con2 = x(4) - x(7) <= 0;
con3 = 2*x(5) - x(1) - x(2)<=0;
con4 = x(6) - x(7) <= 0;
con5 = x(8) - x(5) <= 0;
con6 = 2*x(9) - x(1) - x(2)<=0;
con7 = sum(x(1:5))>=2;
con8 = x(3)+x(5)+x(6)+x(8)+x(9)>=3;
con9 =  x(4)+x(6)+x(7)+x(9)>=2;
cons = [con1;con2;con3;con4;con5;con6];
cons2 = [con7;con8;con9];
pro.Constraints.con1=cons;
pro.Constraints.con2=cons2;
[sol fval_LL] = solve(pro); 
sol.x 
fval_LL
toc

最终所需要选择的课程为6门,分别为x1 = x2 = x3 = x5 = x6 = x7 =1。


https://www.fengoutiyan.com/post/14040.html

相关文章:

  • 单纯形法求解线性规划matlab
  • matlab解线性规划问题程序例题
  • matlab最优化线性规划
  • matlab零基础入门教程
  • matlab求解线性规划问题
  • 线性规划MATLAB
  • matlab线性规划代码
  • matlab subplot
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機