最优化算法对偶单纯形法的matlab实现(对偶单纯形法看这一篇就够了)
文章目录
- 前言
- 一、单纯形法表格
- 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实现(对偶单纯形法看这一篇就够了)相关推荐
- tarjan算法总结 (强连通分量+缩点+割点),看这一篇就够了~
文章目录 一.tarjan求强连通分量 1:算法流程 2:模板 二.tarjan缩点 1:相关定义 2:算法流程 三.tarjan求割点.桥 1.什么是割点 2.割点怎么求? 3.割点tarjan模板 ...
- 最优化算法单纯形法的matlab实现(单纯形法看这一篇就够了)
文章目录 前言 一.单纯形法表格 1.1可立即读出最优解和最优值的表格具备的特点 二.单纯形法的步骤(流程图) 三.单纯形法的matlab实现 3.1单纯形法matlab代码 3.2测试例题 3.3结 ...
- 线性规划单纯形法的matlab程序,线性规划单纯形法的MATLAB实现_数学专业.doc
摘要:运筹学有着长远的发展历史,并且不断地发展变化出许多分支理论,线性规划是运筹学中专研较早,发展比较快速,对现实社会作用涵盖面广,理论系统趋于成熟的一个重要分支,虽然其只是运筹学的一小部分,但是作用 ...
- 数据产品必备技术知识:机器学习及常见算法,看这一篇就够了
大家都知道,产品经理需要懂技术,很多面试官都偏好有技术背景的同学,毕竟产品经理经常要和开发同学相爱相杀.当然也不是一定要求能够精通,但是至少不要让这块成为沟通的障碍,懂点技术,实际工作中也能少被开发同 ...
- 【最优化算法】基于【MATLAB】的最速下降仿真
文章目录 前言 一.最速下降法介绍 二.最速下降法原理 三.最速下降法步骤 四.最速下降法代码 五.最速下降法测试 总结 前言 无约束问题的求解过程一般都是通过一系列的一维搜索来实现,搜索方向的不同, ...
- 【最优化算法】基于【MATLAB】的拟牛顿法【Quasi Newton method】分析与推导
- Dropout、梯度消失/爆炸、Adam优化算法,神经网络优化算法看这一篇就够了
作者 | mantch 来源 | 知乎 1. 训练误差和泛化误差 对于机器学习模型在训练数据集和测试数据集上的表现.如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时, ...
- 算法函数_关于损失函数和优化算法,看这一篇就够了
在进行神经网络训练时,很多同学都不太注重损失函数图和损失函数的优化算法的理解,造成的结果就是:看起来效果不错,但是不知道训练的参数是否合理,也不知道有没有进一步优化的空间,也不知道初始点的选择是否恰当 ...
- 多段线简化算法,看这一篇就够了
本文参考自:https://www.codeproject.com/Articles/114797/Polyline-Simplification 前言 在计算几何中,经常我们会碰到需要简化输入Pol ...
最新文章
- idea报错解决:Cannot start compilation: the output path is not specified for module “XXX“.
- 【前端面试】HTML5+CSS3初级面试1
- [pytorch、学习] - 5.3 多输入通道和多输出通道
- Android开发中依赖注入的应用
- simulink模块使用记录2-EnabledSubsystem/merge
- 系统下装软件_DCS系统的日常保养工作怎么做
- 立创eda学习笔记二十五:绘制原理图的电气网络(绘制导线,使用节点)
- oc语言的优缺点有哪些
- 手机版wps支持格式
- CPU性能的三大主要参数
- Andriod 布局
- 交叉编译openssl
- centos:gtk:No package ‘gdk-2.0‘ found
- 计算机与地震论文,地震勘探学术论文
- 最简单直接粗暴的Mothur分析OTU教程
- 微信小程序 - 自定义组件中类似页面 onShow 的页面显示就触发的生命周期钩子函数(页面回退时更新数据常用, 例如回退页面更新子组件数据, 回退更新子组件中 data 内容)
- uniapp 小程序实现 RSA 加密
- appStore 应用审核-加急审核
- 每天心烦气躁,被领导批评就想辞职,还要坚持吗?
- 最短路 (Dijstra) 最短路
热门文章
- 黑盒子测试用例设计方法
- java我的世界怎么装mod_我的世界mod怎么安装 MOD安装教程
- 5G x小区搜索_济南移动5G技术助力第四届世界生命科技大会
- linux 系统开启火狐命令_linux下安装firefox
- root_path运用python_Python app.root_path方法代碼示例
- 鸿蒙系统nova3i,AI四摄加持 华为nova3i 6+128版本今日预售
- 专家激辩:Libra横空出世,央行数字货币呼之欲出,会产生哪些影响?
- 二、crm用户登录实现
- MySQL 5.7 Reference Manual Chapter 13 Functions and Operators 参考手册第十三章函数与操作符内容总结
- 实现js程序在vscode控制台输出的方法(看完方便多了)