文章目录

  • 一,实验内容
  • 二,建立的线性规划模型:
  • 三,实验方法与步骤:
    • 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. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​−52​x1​+53​x2​+53​x3​−51​x1​−51​x2​+54​x3​−2017​x4​+203​x5​+203​x6​−53​x4​−53​x5​+52​x6​−21​x7​−21​x8​+21​x9​x1​+x4​+x7​x2​+x5​+x8​x3​+x6​+x9​x1​,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. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​−52​x1​+53​x2​+53​x3​+x10​−51​x1​−51​x2​+54​x3​+x11​−2017​x4​+203​x5​+203​x6​+x12−53​x4​−53​x5​+52​x6​+x13​−21​x7​−21​x8​+21​x9​+x14​x1​+x4​+x7​+x15​x2​+x5​+x8​+x16​x3​+x6​+x9​+x17​x1​,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实现单纯形法相关推荐

  1. 运筹学——matlab实现对偶单纯形法

    前言 之前我已经发布了matlab实现单纯形法的相关内容,想了解的小伙伴可以点击这个链接: https://blog.csdn.net/abbcdc/article/details/111324457 ...

  2. 用matlab解单纯形法,实验二MATLAB编程单纯形法求解

    <实验二MATLAB编程单纯形法求解>由会员分享,可在线阅读,更多相关<实验二MATLAB编程单纯形法求解(11页珍藏版)>请在人人文库网上搜索. 1.北京联合大学 实验报告 ...

  3. 【运筹学】线性规划 单纯形法 案例二 ( 第一次迭代 | 矩阵变换 | 检验数计算 | 最优解判定 | 入基变量 | 出基变量 )

    文章目录 一.第一次迭代 : 进行行变换 二.第一次迭代 : 计算检验数 三.第一次迭代 : 最优解判定 四.第一次迭代 : 入基变量 五.第一次迭代 : 出基变量 [运筹学]线性规划 单纯形法 ( ...

  4. 【运筹学】线性规划 单纯形法 阶段总结 ( 初始基可行解 | 判定最优解 | 迭代 | 得到最优解 | 全流程详细解析 ) ★

    文章目录 一.线性规划示例 二.转化标准形式 三.查找初始基可行解 四.初始基可行解的最优解判定 五.第一次迭代 : 入基与出基变量选择 六.第一次迭代 : 方程组同解变换 七.第一次迭代 : 生成新 ...

  5. matlab在运筹学,MATLAB在运筹学(单纯形法)教学中的应用

    第8卷第3期 2009年 9月 石家庄铁路职业技术学院学报 VOL.8 No.3 些 墨 INsTI TE oF RAILWAYTECHNOLOGY Sep.2009 MATLAB在运筹学 (单纯形法 ...

  6. matlab建模实例运筹学,matlab数学建模实例与编程教程

    资 源 简 介 现实世界中有很多问题,它的机理较简单,用静态,线性或逻辑的方法即可建立模型,使用初等的数学方法,即可求解,我们称之为初等数学模型.本章主要介绍有关自然数,比例关系,状态转移,及量刚分析 ...

  7. 【运筹学】线性规划 单纯形法 案例二 ( 案例解析 | 标准形转化 | 查找初始基可行解 | 最优解判定 | 查找入基变量与出基变量 | 第一次迭代 )

    文章目录 一.线性规划示例 二.转化成标准形式 三.初始基可行解 四.列出单纯形表 五.计算检验数 六.选择入基变量与出基变量 七.第一次迭代 : 列出单纯形表 一.线性规划示例 线性规划示例 : 使 ...

  8. 【运筹学】线性规划 单纯形法 ( 原理 | 约定符号 | 目标系数矩阵 C | 目标函数变量矩阵 X | 约束方程常数矩阵 b | 系数矩阵 A | 向量 | 向量符号 | 向量 Pj )

    文章目录 I . 单纯形法 引入 II . 单纯形法 基本原理 III . 线性规划 标准形式 IV . 线性规划 标准形式 普通形式公式 V . 线性规划 标准形式 展开完整形式公式 VI . 线性 ...

  9. 运筹学matlab实验报告,运筹学上机实验报告 利用Matlab求解整数线性规划

    四川师范大学数学与软件科学学院运筹学上机实验报告. 学期:__2011_至__2012__ 第___一__ 学期 2011年11月9日 课程名称:__ 运 筹 学 ________ 专业:_信息与计算 ...

  10. 运筹学 ——线性规划之单纯形法

    专栏简介: 大家好,我是小佘,一名交通专业在读本科生.新学期我们专业开设了运筹学课程,运筹学是本专业核心课程之一,所以学好运筹学是很有必要的.开设这个专栏的目的主要是为了督促自己及时整理,复习所学知识 ...

最新文章

  1. 自己对Delphi中使用正则表达式的研究心得
  2. windoes硬盘备份(数据迁移)的方法
  3. 【干货】智能电视UI设计那些事儿
  4. 【2018.4.14】模拟赛之四-ssl2394 剪草【dp】
  5. 如何查看电脑显卡配置_无需软件!直接查看电脑配置方法
  6. SageMaker 超参数优化作业
  7. vue 数组中嵌套的对象添加新属性--页面更新
  8. vue-cli中引入jquery的方法
  9. 作为IT码农,我是如何给小孩取名字的(推荐收藏,总有需要的一天)
  10. win10 保护计算机 密码,在win10中这样设置用户密码过期时间,可以保证电脑安全...
  11. java源码简体转繁体
  12. 自考本科计算机要学什么,计算机自考本科需要考哪些科目
  13. 基于javaweb学生就业管理系统的设计与实现(论文+程序设计+数据库文件)下载
  14. 在线IDE~快速体验在线编程
  15. oracle数据投毒,Oracle 监听投毒COST解决
  16. 炫酷!从未见过如此Q弹的Switcher
  17. A Game of Thrones(39)
  18. C++ 捕获本机网卡的IP包并对其解析的实现
  19. Prometheus 简介与架构
  20. 南京邮电大学CTF题目writeup (一) 含题目地址

热门文章

  1. 如何借助OpManager解决存储监控问题?
  2. Linux brctl 详解
  3. 最简单快速的源码开发平台 -- LEARUN
  4. java字符编码方式_java字符编码方式总结
  5. 如何用ESP8266/ESP8285做一个WIFI中继(WiFi信号放大器)
  6. ROS学习笔记(一)#ROS系统及RoboWare的安装
  7. 大气层整合傻瓜包_三国无双7大气层傻瓜包存档
  8. matlab自回归模型AIC,时间序列笔记-自回归模型(二)
  9. cpt怎么转换成HTML,Excel直接转成模板cpt
  10. 高中计算机考试app,信考中学信息技术考试练习系统 V17.1.0.1009 浙江高中版