运筹学 matlab实现单纯形法
文章目录
- 一,实验内容
- 二,建立的线性规划模型:
- 三,实验方法与步骤:
- 1,化为标准型:
- 2,在matlab中实现求解标准型的程序。
- a,定义输入,用单纯形表计算:
- b,计算步骤:
- 1,根据数学模型确定初始可行基和初始基可行解,建立初始单纯形表。
- 2,计算各非基变量检验数,并判断是否是最优解:
- 3,判断此问题是否无界:
- 4,确定换入换出变量并记录位置以及更新N矩阵:(N矩阵用来存取的基变量的位置)
- 5,以换入换出变量找到的alka_{lk}alk位置进行迭代即利用高斯消去法或称为旋转运算。
- c,实现matlab程序 ssimplex.m:
- 四,实验结果:
- 五,实验结果分析:
- 六,附录:部分其余样例
一,实验内容
二,建立的线性规划模型:
maxz=0.9x1+1.4x2+1.9x3+0.45x4+0.95x5+1.45x6−0.05x7+0.45x8+0.95x9max z=0.9x_1+1.4x_2+1.9x_3+0.45x_4+0.95x_5+1.45x_6-0.05x_7+0.45x_8+0.95x_9 maxz=0.9x1+1.4x2+1.9x3+0.45x4+0.95x5+1.45x6−0.05x7+0.45x8+0.95x9
{−25x1+35x2+35x3≤0−15x1−15x2+45x3≤0−1720x4+320x5+320x6≤0−35x4−35x5+25x6≤0−12x7−12x8+12x9≤0x1+x4+x7≤2000x2+x5+x8≤2500x3+x6+x9≤1200x1,x2,x3,x4,x5,x6,x7,x8,x9≥0\left\{\begin{matrix} -\frac{2}{5}x_1+\frac{3}{5}x_2+\frac{3}{5}x_3&\le 0\\ -\frac{1}{5}x_1-\frac{1}{5}x_2+\frac{4}{5}x_3&\le 0\\ -\frac{17}{20}x_4+\frac{3}{20}x_5+\frac{3}{20}x_6&\le 0\\ -\frac{3}{5}x_4-\frac{3}{5}x_5+\frac{2}{5}x_6&\le 0\\ -\frac{1}{2}x_7-\frac{1}{2}x_8+\frac{1}{2}x_9&\le 0\\ x_1+x_4+x_7 &\le 2000\\ x_2+x_5+x_8&\le 2500\\ x_3+x_6+x_9&\le 1200\\ x_1,x_2,x_3,x_4,x_5,x_6,x_7,x_8,x_9 &\ge 0 \end{matrix}\right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧−52x1+53x2+53x3−51x1−51x2+54x3−2017x4+203x5+203x6−53x4−53x5+52x6−21x7−21x8+21x9x1+x4+x7x2+x5+x8x3+x6+x9x1,x2,x3,x4,x5,x6,x7,x8,x9≤0≤0≤0≤0≤0≤2000≤2500≤1200≥0
三,实验方法与步骤:
1,化为标准型:
maxz=0.9x1+1.4x2+1.9x3+0.45x4+0.95x5+1.45x6−0.05x7+0.45x8+0.95x9max z=0.9x_1+1.4x_2+1.9x_3+0.45x_4+0.95x_5+1.45x_6-0.05x_7+0.45x_8+0.95x_9 maxz=0.9x1+1.4x2+1.9x3+0.45x4+0.95x5+1.45x6−0.05x7+0.45x8+0.95x9
{−25x1+35x2+35x3+x10=0−15x1−15x2+45x3+x11=0−1720x4+320x5+320x6+x12=0−35x4−35x5+25x6+x13=0−12x7−12x8+12x9+x14=0x1+x4+x7+x15=2000x2+x5+x8+x16=2500x3+x6+x9+x17=1200x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17≥0\left\{\begin{matrix} -\frac{2}{5}x_1+\frac{3}{5}x_2+\frac{3}{5}x_3+x_{10}&= 0\\ -\frac{1}{5}x_1-\frac{1}{5}x_2+\frac{4}{5}x_3+x_{11}&= 0\\ -\frac{17}{20}x_4+\frac{3}{20}x_5+\frac{3}{20}x_6+x{12}&= 0\\ -\frac{3}{5}x_4-\frac{3}{5}x_5+\frac{2}{5}x_6+x_{13}&= 0\\ -\frac{1}{2}x_7-\frac{1}{2}x_8+\frac{1}{2}x_9+x_{14}&= 0\\ x_1+x_4+x_7+x_{15} &= 2000\\ x_2+x_5+x_8+x_{16}&=2500\\ x_3+x_6+x_9+x_{17}&= 1200\\ x_1,x_2,x_3,x_4,x_5,x_6,x_7,x_8,x_9,x_{10},x_{11},x_{12},x_{13},x_{14},x_{15},x_{16},x_{17} &\ge 0 \end{matrix}\right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧−52x1+53x2+53x3+x10−51x1−51x2+54x3+x11−2017x4+203x5+203x6+x12−53x4−53x5+52x6+x13−21x7−21x8+21x9+x14x1+x4+x7+x15x2+x5+x8+x16x3+x6+x9+x17x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17=0=0=0=0=0=2000=2500=1200≥0
2,在matlab中实现求解标准型的程序。
a,定义输入,用单纯形表计算:
% 单纯形法matlab程序-ssimplex
% 求解标准型线性规划:max c*x; s.t. A*x=b; x>=0
% 本函数中的A是单纯初始表,包括:最后一行是初始的检验数,最后一列是资源向量b
% N是初始的基变量的下标
% 输出变量sol是最优解, 其中松弛变量(或剩余变量)可能不为0
% 输出变量val是最优目标值,kk是迭代次数
b,计算步骤:
1,根据数学模型确定初始可行基和初始基可行解,建立初始单纯形表。
即初始输入的A矩阵和N矩阵。
A=[ -0.4 0.6 0.6 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0;-0.2 -0.2 0.8 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0;0 0 0 -0.85 0.15 0.15 0 0 0 0 0 1 0 0 0 0 0 0; 0 0 0 -0.6 -0.6 0.4 0 0 0 0 0 0 1 0 0 0 0 0;0 0 0 0 0 0 -0.5 -0.5 0.5 0 0 0 0 1 0 0 0 0;1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 2000;0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 2500;0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1200;0.9 1.4 1.9 0.45 0.95 1.45 -0.05 0.45 0.95 0 0 0 0 0 0 0 0 0];
N=[10 11 12 13 14 15 16 17];
2,计算各非基变量检验数,并判断是否是最优解:
初始时检验数即为开始的max z里面的系数,后面在转轴运算的时候通过如下代码计算。
%i=mA时此时就是更新检验数
for i=1:mAif i~=outb %~=为不等号A(i,:)=A(i,:)-A(outb,:)*A(i,inb);end
end
3,判断此问题是否无界:
for i=1:nA-1if A(mA,i)>0&A(1:mA-1,i)<=0 % 第i个为换入变量但是无相应的换出变量。问题有无界解disp('have infinite solution!');flag=0;break;endend
4,确定换入换出变量并记录位置以及更新N矩阵:(N矩阵用来存取的基变量的位置)
代码较长且简单直接看ssimplex.m文件即可。
5,以换入换出变量找到的alka_{lk}alk位置进行迭代即利用高斯消去法或称为旋转运算。
% 以下进行转轴运算A(outb,:)=A(outb,:)/A(outb,inb);for i=1:mAif i~=outb %~=为不等号A(i,:)=A(i,:)-A(outb,:)*A(i,inb);endend
6,重复1~5的直到得到最优解。
c,实现matlab程序 ssimplex.m:
function [sol,val,kk]=ssimplex(A,N)
[mA,nA]=size(A); %返回矩阵 行数和列数
kk=0; % 迭代次数
flag=1;
while flagkk=kk+1;if A(mA,:)<=0 % 已找到最优解 :表示所有的行或者列(取决于位置在哪)flag=0;sol=zeros(1,nA-1); %生成一个1行nA-1列的矩阵for i=1:mA-1sol(N(i))=A(i,nA); %这是将单纯形表的最右边一列的b赋给基变量endval=-A(mA,nA); %保存结果z的值elsefor i=1:nA-1if A(mA,i)>0 & A(1:mA-1,i)<=0 % 第i个为换入变量但是无相应的换出变量。问题有无界解disp('have infinite solution!');flag=0;break;endendif flag % 还不是最优表,进行转轴运算temp=0;for i=1:nA-1if A(mA,i)>temptemp=A(mA,i);inb=i; % 进基变量的下标endend %寻找检验数最大的为换入变量,记录值,并记录下标sita=zeros(1,mA-1)*nan; %寻找换出变量for i=1:mA-1sita(i)=-1;endfor i=1:mA-1if A(i,inb)>0sita(i)=A(i,nA)/A(i,inb);endendtemp=inf; %寻找最小的sita来找出换出变量for i=1:mA-1if sita(i)>=0&sita(i)<temp temp=sita(i);outb=i; % 出基变量下标endend% 以下更新NN(outb)=inb;% 以下进行转轴运算A(outb,:)=A(outb,:)/A(outb,inb);for i=1:mAif i~=outb %~=为不等号A(i,:)=A(i,:)-A(outb,:)*A(i,inb);endendendend
end
输入可以为:
A=[ -0.4 0.6 0.6 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0;-0.2 -0.2 0.8 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0;0 0 0 -0.85 0.15 0.15 0 0 0 0 0 1 0 0 0 0 0 0; 0 0 0 -0.6 -0.6 0.4 0 0 0 0 0 0 1 0 0 0 0 0;0 0 0 0 0 0 -0.5 -0.5 0.5 0 0 0 0 1 0 0 0 0;1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 2000;0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 2500;0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1200;0.9 1.4 1.9 0.45 0.95 1.45 -0.05 0.45 0.95 0 0 0 0 0 0 0 0 0];
N=[10 11 12 13 14 15 16 17];
[sol,val,kk]=ssimplex(A,N)
或者将A,N矩阵加入在函数中求得结果。
四,实验结果:
结果为:
sol =1.0e+03 *1.5267 1.0178 0 0.4733 1.4822 1.2000 0 0 0 0 0.5089 0 0.6933 0 0 0 0val =6160kk =9
以下是matlab截图结果:
五,实验结果分析:
经过计算,实验结果正确,并使用多个样例测试程序皆有正确结果。
六,附录:部分其余样例
%样例1 4360% 结果为 x = 320.0000 360.0000 0 0 20.0000 390.000 ]
A=[ 2 1 1 0 0 0 1000;3 4 0 1 0 0 2400;1 1 0 0 1 0 700;1 -1 0 0 0 1 350;8 5 0 0 0 0 0];
N=[3 4 5 6];
[sol,val,kk]=ssimplex(A,N) /不用加分号
书本例题:
%样例3
A=[ 1 2 1 0 0 8;4 0 0 1 0 16;0 4 0 0 1 122 3 0 0 0 0];
N=[3 4 5];
[sol,val,kk]=ssimplex(A,N)
运筹学 matlab实现单纯形法相关推荐
- 运筹学——matlab实现对偶单纯形法
前言 之前我已经发布了matlab实现单纯形法的相关内容,想了解的小伙伴可以点击这个链接: https://blog.csdn.net/abbcdc/article/details/111324457 ...
- 用matlab解单纯形法,实验二MATLAB编程单纯形法求解
<实验二MATLAB编程单纯形法求解>由会员分享,可在线阅读,更多相关<实验二MATLAB编程单纯形法求解(11页珍藏版)>请在人人文库网上搜索. 1.北京联合大学 实验报告 ...
- 【运筹学】线性规划 单纯形法 案例二 ( 第一次迭代 | 矩阵变换 | 检验数计算 | 最优解判定 | 入基变量 | 出基变量 )
文章目录 一.第一次迭代 : 进行行变换 二.第一次迭代 : 计算检验数 三.第一次迭代 : 最优解判定 四.第一次迭代 : 入基变量 五.第一次迭代 : 出基变量 [运筹学]线性规划 单纯形法 ( ...
- 【运筹学】线性规划 单纯形法 阶段总结 ( 初始基可行解 | 判定最优解 | 迭代 | 得到最优解 | 全流程详细解析 ) ★
文章目录 一.线性规划示例 二.转化标准形式 三.查找初始基可行解 四.初始基可行解的最优解判定 五.第一次迭代 : 入基与出基变量选择 六.第一次迭代 : 方程组同解变换 七.第一次迭代 : 生成新 ...
- matlab在运筹学,MATLAB在运筹学(单纯形法)教学中的应用
第8卷第3期 2009年 9月 石家庄铁路职业技术学院学报 VOL.8 No.3 些 墨 INsTI TE oF RAILWAYTECHNOLOGY Sep.2009 MATLAB在运筹学 (单纯形法 ...
- matlab建模实例运筹学,matlab数学建模实例与编程教程
资 源 简 介 现实世界中有很多问题,它的机理较简单,用静态,线性或逻辑的方法即可建立模型,使用初等的数学方法,即可求解,我们称之为初等数学模型.本章主要介绍有关自然数,比例关系,状态转移,及量刚分析 ...
- 【运筹学】线性规划 单纯形法 案例二 ( 案例解析 | 标准形转化 | 查找初始基可行解 | 最优解判定 | 查找入基变量与出基变量 | 第一次迭代 )
文章目录 一.线性规划示例 二.转化成标准形式 三.初始基可行解 四.列出单纯形表 五.计算检验数 六.选择入基变量与出基变量 七.第一次迭代 : 列出单纯形表 一.线性规划示例 线性规划示例 : 使 ...
- 【运筹学】线性规划 单纯形法 ( 原理 | 约定符号 | 目标系数矩阵 C | 目标函数变量矩阵 X | 约束方程常数矩阵 b | 系数矩阵 A | 向量 | 向量符号 | 向量 Pj )
文章目录 I . 单纯形法 引入 II . 单纯形法 基本原理 III . 线性规划 标准形式 IV . 线性规划 标准形式 普通形式公式 V . 线性规划 标准形式 展开完整形式公式 VI . 线性 ...
- 运筹学matlab实验报告,运筹学上机实验报告 利用Matlab求解整数线性规划
四川师范大学数学与软件科学学院运筹学上机实验报告. 学期:__2011_至__2012__ 第___一__ 学期 2011年11月9日 课程名称:__ 运 筹 学 ________ 专业:_信息与计算 ...
- 运筹学 ——线性规划之单纯形法
专栏简介: 大家好,我是小佘,一名交通专业在读本科生.新学期我们专业开设了运筹学课程,运筹学是本专业核心课程之一,所以学好运筹学是很有必要的.开设这个专栏的目的主要是为了督促自己及时整理,复习所学知识 ...
最新文章
- 自己对Delphi中使用正则表达式的研究心得
- windoes硬盘备份(数据迁移)的方法
- 【干货】智能电视UI设计那些事儿
- 【2018.4.14】模拟赛之四-ssl2394 剪草【dp】
- 如何查看电脑显卡配置_无需软件!直接查看电脑配置方法
- SageMaker 超参数优化作业
- vue 数组中嵌套的对象添加新属性--页面更新
- vue-cli中引入jquery的方法
- 作为IT码农,我是如何给小孩取名字的(推荐收藏,总有需要的一天)
- win10 保护计算机 密码,在win10中这样设置用户密码过期时间,可以保证电脑安全...
- java源码简体转繁体
- 自考本科计算机要学什么,计算机自考本科需要考哪些科目
- 基于javaweb学生就业管理系统的设计与实现(论文+程序设计+数据库文件)下载
- 在线IDE~快速体验在线编程
- oracle数据投毒,Oracle 监听投毒COST解决
- 炫酷!从未见过如此Q弹的Switcher
- A Game of Thrones(39)
- C++ 捕获本机网卡的IP包并对其解析的实现
- Prometheus 简介与架构
- 南京邮电大学CTF题目writeup (一) 含题目地址
热门文章
- 如何借助OpManager解决存储监控问题?
- Linux brctl 详解
- 最简单快速的源码开发平台 -- LEARUN
- java字符编码方式_java字符编码方式总结
- 如何用ESP8266/ESP8285做一个WIFI中继(WiFi信号放大器)
- ROS学习笔记(一)#ROS系统及RoboWare的安装
- 大气层整合傻瓜包_三国无双7大气层傻瓜包存档
- matlab自回归模型AIC,时间序列笔记-自回归模型(二)
- cpt怎么转换成HTML,Excel直接转成模板cpt
- 高中计算机考试app,信考中学信息技术考试练习系统 V17.1.0.1009 浙江高中版