文章目录

  • 前言
  • 一、单纯形法表格
    • 1.1可立即读出最优解和最优值的表格具备的特点
  • 二、对偶单纯形法的步骤(流程图)
  • 三、对偶单纯形法的matlab实现
    • 3.1对偶单纯形法matlab代码
    • 3.2测试例题
    • 3.3结果
  • 总结

前言

最优化算法对偶单纯形法的matlab实现:
要读懂本文代码需要了解:nchoosek,setdiff,eye等函数在matlab中的作用,以及/符号在矩阵运算中的作用。


一、单纯形法表格

在高等教育出版社《最优化方法》一书中提到的单纯形法表格如下图所示:

其中:c为目标函数系数, A为约束方程组系数矩阵, b为约束方程组常数项。

1.1可立即读出最优解和最优值的表格具备的特点

① 中心部位有单位子块
② 右列元素非负
③ 底行相应于单位子块的位置为0
④ 底行其他元素非负

二、对偶单纯形法的步骤(流程图)

三、对偶单纯形法的matlab实现

3.1对偶单纯形法matlab代码

function [xm,fm,noi] = duioudcxf(A,b,c)
%% 介绍
% 对偶单纯形法求解标准形线性规划问题: min cx s.t. Ax=b x>=0
% 输入参数: c为目标函数系数, A为约束方程组系数矩阵, b为约束方程组常数项
% 输出参数: xm为最求解,fm为最优函数值,noi为迭代次数
%% 准备
format rat                                                                 %元素使用分数表示
[m,n] = size(A);                                                           %m约束条件个数, n决策变量数
v=nchoosek(1:n,m);                                                         %创建一个矩阵,该矩阵的行由每次从1:n中的n个元素取出k个取值的所有可能组合构成。矩阵 C 包含 m!/((n–m)! m!) 行和 m列
index_Basis=[];
%% 提取可行解所在列
for i=1:size(v,1)                                                          %n取m的种类if A(:,v(i,:))==eye(m)                                                 %在中心部位A中取v的第i种取法取出m列判断是否存在m*m大小的单位矩阵index_Basis=v(i,:);                                                %存在单位矩阵的取法保存在列表index_Basis中end
end
%% 提取非基变量索引
ind_Nonbasis = setdiff(1:n, index_Basis);                                  %非基变量的索引,返回在1:n中出现而不在index_Basis(即基变量索引中出现的元素),并从小到大排序
noi=0;
while truex0 = zeros(n,1);x0(index_Basis) = b;                                                   %初始基可行解cB = c(index_Basis);                                                   %提取基向量在目标函数的系数cB
%% 判断最优解if ~any(b < 0)                                                         %此基可行解为最优解, any存在某个<0        xm = x0;fm = c'*xm;returnend
%% 判断问题是否有解index=find(b<0);for i = 1:numel(index)if all(A(index(i),:)>=0)                                           %在b<0的元素,所对应行所有元素都大于0xm=[];fm = [];                                                       %原问题无可行解,对偶问题存在无界解returnendend
%% 选择进基变量,选择离基变量Sigma = zeros(1,n);Sigma(ind_Nonbasis) = c(ind_Nonbasis)' - cB'*A(:,ind_Nonbasis);        %计算检验数[~,q] = min(b);                                                        %选出b中最小的数r = index_Basis(q);                                                    %确定离基变量索引rTheta = Sigma ./ A(q,:);                                               %计算b/aiTheta(Theta>=0) =-1000000;                                             %剔除ai>0的部分[~,s] = max(Theta);                                                     %筛选出最大的b/ai,确定进基变量索引s, 主元为A(q,s)
%% 换基index_Basis(index_Basis == r) = s;                                     %原先基变量为r的索引更换成新的基变量索引sind_Nonbasis = setdiff(1:n, index_Basis);                              %筛选出非基变量索引
%% 核心——旋转运算A(:,ind_Nonbasis) = A(:,index_Basis) \ A(:,ind_Nonbasis);              %核心——非基变量的部分等于(=)基变量索引的矩阵的逆乘剩余非基变量的矩阵b = A(:,index_Basis) \ b;                                              %核心——约束方程组常数项(=)基变量索引的矩阵的逆乘原约束方程常数项目A(:,index_Basis) = eye(m);                                             %核心——基变量索引的矩阵更换成单位矩阵noi=noi+1;
end
end

3.2测试例题

clc,clear;
A=[-2 -4 -5 -1  1  0  0;-3  1 -7  2  0  1  0;-5 -2 -1 -6  0  0  1];
b=[0 -2 -15]';
c=[3 2 1 4  0  0  0]';
[xm,fm,noi] = duioudcxf(A,b,c);
disp('最优解为:');
disp(xm);
disp('最优函数值为:');
disp(fm);
disp('迭代次数为:');
disp(noi);

3.3结果

总结

以上就是对偶单纯形法的matlab实现,有什么疑惑的地方可以私信或者评论区提问,需要流程图的也可以私信我。
本文参考的相关文章链接:最优化算法单纯形法的matlab实现(单纯形法看这一篇就够了)

最优化算法对偶单纯形法的matlab实现(对偶单纯形法看这一篇就够了)相关推荐

  1. tarjan算法总结 (强连通分量+缩点+割点),看这一篇就够了~

    文章目录 一.tarjan求强连通分量 1:算法流程 2:模板 二.tarjan缩点 1:相关定义 2:算法流程 三.tarjan求割点.桥 1.什么是割点 2.割点怎么求? 3.割点tarjan模板 ...

  2. 最优化算法单纯形法的matlab实现(单纯形法看这一篇就够了)

    文章目录 前言 一.单纯形法表格 1.1可立即读出最优解和最优值的表格具备的特点 二.单纯形法的步骤(流程图) 三.单纯形法的matlab实现 3.1单纯形法matlab代码 3.2测试例题 3.3结 ...

  3. 线性规划单纯形法的matlab程序,线性规划单纯形法的MATLAB实现_数学专业.doc

    摘要:运筹学有着长远的发展历史,并且不断地发展变化出许多分支理论,线性规划是运筹学中专研较早,发展比较快速,对现实社会作用涵盖面广,理论系统趋于成熟的一个重要分支,虽然其只是运筹学的一小部分,但是作用 ...

  4. 数据产品必备技术知识:机器学习及常见算法,看这一篇就够了

    大家都知道,产品经理需要懂技术,很多面试官都偏好有技术背景的同学,毕竟产品经理经常要和开发同学相爱相杀.当然也不是一定要求能够精通,但是至少不要让这块成为沟通的障碍,懂点技术,实际工作中也能少被开发同 ...

  5. 【最优化算法】基于【MATLAB】的最速下降仿真

    文章目录 前言 一.最速下降法介绍 二.最速下降法原理 三.最速下降法步骤 四.最速下降法代码 五.最速下降法测试 总结 前言 无约束问题的求解过程一般都是通过一系列的一维搜索来实现,搜索方向的不同, ...

  6. 【最优化算法】基于【MATLAB】的拟牛顿法【Quasi Newton method】分析与推导

  7. Dropout、梯度消失/爆炸、Adam优化算法,神经网络优化算法看这一篇就够了

    作者 | mantch 来源 | 知乎 1. 训练误差和泛化误差 对于机器学习模型在训练数据集和测试数据集上的表现.如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时, ...

  8. 算法函数_关于损失函数和优化算法,看这一篇就够了

    在进行神经网络训练时,很多同学都不太注重损失函数图和损失函数的优化算法的理解,造成的结果就是:看起来效果不错,但是不知道训练的参数是否合理,也不知道有没有进一步优化的空间,也不知道初始点的选择是否恰当 ...

  9. 多段线简化算法,看这一篇就够了

    本文参考自:https://www.codeproject.com/Articles/114797/Polyline-Simplification 前言 在计算几何中,经常我们会碰到需要简化输入Pol ...

最新文章

  1. idea报错解决:Cannot start compilation: the output path is not specified for module “XXX“.
  2. 【前端面试】HTML5+CSS3初级面试1
  3. [pytorch、学习] - 5.3 多输入通道和多输出通道
  4. Android开发中依赖注入的应用
  5. simulink模块使用记录2-EnabledSubsystem/merge
  6. 系统下装软件_DCS系统的日常保养工作怎么做
  7. 立创eda学习笔记二十五:绘制原理图的电气网络(绘制导线,使用节点)
  8. oc语言的优缺点有哪些
  9. 手机版wps支持格式
  10. CPU性能的三大主要参数
  11. Andriod 布局
  12. 交叉编译openssl
  13. centos:gtk:No package ‘gdk-2.0‘ found
  14. 计算机与地震论文,地震勘探学术论文
  15. 最简单直接粗暴的Mothur分析OTU教程
  16. 微信小程序 - 自定义组件中类似页面 onShow 的页面显示就触发的生命周期钩子函数(页面回退时更新数据常用, 例如回退页面更新子组件数据, 回退更新子组件中 data 内容)
  17. uniapp 小程序实现 RSA 加密
  18. appStore 应用审核-加急审核
  19. 每天心烦气躁,被领导批评就想辞职,还要坚持吗?
  20. 最短路 (Dijstra) 最短路

热门文章

  1. 黑盒子测试用例设计方法
  2. java我的世界怎么装mod_我的世界mod怎么安装 MOD安装教程
  3. 5G x小区搜索_济南移动5G技术助力第四届世界生命科技大会
  4. linux 系统开启火狐命令_linux下安装firefox
  5. root_path运用python_Python app.root_path方法代碼示例
  6. 鸿蒙系统nova3i,AI四摄加持 华为nova3i 6+128版本今日预售
  7. 专家激辩:Libra横空出世,央行数字货币呼之欲出,会产生哪些影响?
  8. 二、crm用户登录实现
  9. MySQL 5.7 Reference Manual Chapter 13 Functions and Operators 参考手册第十三章函数与操作符内容总结
  10. 实现js程序在vscode控制台输出的方法(看完方便多了)