数学建模学习笔记——线性规划

2023-10-30


本文章为《数学建模算法与应用(司守奎)》书籍的学习笔记,文章内代码大部分为该书籍的搬运,主要目的为简化阅读的过程,以便直接实现代码的运用,我也会对书中的习题给出自己的解。

一、基础知识储备

1.线性规划

1.1标准形式

标准形式

%标准型式直接使用matlab自带函数
%[x,favl] = linprog(C,A,b);
%[x,favl] = linprog(C,A,b,Aeq,beq);
%[x,favl] = linprog(C,A,b,Aeq,beq,lb,ub);注意可能有隐含自变量取值非负。
%x为目标函数取得最优时的变量取值,favl为目标函数的最优值,linprog只能求解形式如上的线性规划,如果是max,则对目标函数取负,最后的结果再取负。
%约束条件也必须取负变成小于等于的形式。

1.2非标准形式

非标准形式的线性规划有绝对值型最大最小型/最小最大型两种情况。

  • 绝对值型
    绝对值型
    对于绝对值型,经过转化后可以直接应用matlab自带的函数进行求解。
  • 最大最小型/最小最大型
    最值型
    对于最值-最值型,一般的解题思路都是二分法求解,先给定一个t,看t是否满足约束条件(可行性检验),即取t时,线性规划是否有解,根据是否有解的情况,对搜索的区间进行二分,最终t会收敛到一个给定的值,该值即是满足条件的最优解。
%我写这部分时,不知道用二分法求解线性规划模型时的可行性检验怎么写,不过很幸运,matlab是真的6,我找到了求最大值最小化的函数fminimax()
%该程序以书本上的模型二为例
waw = @(x)[-0.025*x(2),-0.015*x(3),-0.055*x(4),-0.026*x(5)];	%目标函数,因为fminimax默认求最小值最大化,所以对每一个函数取负,x(1)表示对银行的投资额,风险为0,所以一定不会参与到最小值最大化,所以这里不写出。

x0 = [0.2 0.2 0.2 0.2 0.2]';
A = [-0.05 -0.27 -0.19 -0.185 -0.185];
Aeq = [1 1.01 1.02 1.045 1.065];

for i = 0.01:0.01:0.2	%对收益从0.01~0.2以步长0.01取值,对多约束的线性规划求解,favl求得的值为风险度的相反数,取负则得到每一种投资的风险度。
[x favl] = fminimax(waw,x0,A,-i,Aeq,1,zeros(5,1))
end

%给定初始值x0,函数搜索到一个最近的最优值(可能为局部最优值),求解无约束最优值的函数有fminunc(),fminsearch(),具体用法请自行查看官方文档。

1.3多目标规划

多目标规划有传统解法遗传算法,传统解法包括线性加权法优先级法理想点法
多目标规划标准型:
标准型

  • 线性加权法
    线性加权
  • 优先级法
    优先级法
  • 理想点法(非线性规划,当解空间非凸时,常常得到局部最优解)
    理想点法

代码实现
问题:
eg

%线性加权法
X = [];
F = [];
for alpha = 0:0.01:1%alpha表示Z1的权重
    c = [4*(1-alpha)-9*alpha,5*(1-alpha)-10*alpha,8*(1-alpha)-14*alpha];
    A = [2 8 6;4 4 6;7 6 8];
    b = [40;50;80];
    [x,favl] = linprog(c,A,b,[],[],zeros(3,1));
    X = [X x];
    F = [F favl];
end
table = [[0:0.01:1]' X' F'];
fprintf('alpha\t')
for i = 1:size(x,1)
    fprintf('X(%d)\t',i);
end
fprintf('F\t\n');
for i = 0:100
    fprintf('%.2f\t',table(i+1,:));
    fprintf('\n');
end

%优先级法,理想点法略
%遗传算法,matalb有自带的遗传算法,可以实现多目标优化,具体自己如何实现遗传算法等到时间充裕了再好好研究吧
%新建.m文件
function y = fittness(x)

y = zeros(2,1);
y(1) = -9*x(1)-10*x(2)-14*x(3);
y(2) = 4*x(1)+5*x(2)+8*x(3);

end
%具体gamultiobj函数的用法请自己查询官方文档
[x,fval] = gamultiobj(@fittness,3,[2 8 6;4 4 6;7 6 8],[40;50;80],[],[],zeros(3,1),[])

2.运输问题

某商品有m 个产地、n 个销地,各产地的产量分别为a1,…,am ,各销地的需求量分别为b1,…,bn 。若该商品由i 产地运到 j 销地的单位运价为cij ,问应该如何调运才能使总运费最省?
运输问题
对该问题的目标函数和约束条件进行变形,可得标准线性规划形式。
化为标准
生成系数矩阵A的代码如下:

%新建一个.m文件生成系数矩阵
function A = portA( m,n )
%portA 生成运输类问题的系数矩阵,原问题C矩阵为m行,n列
A = zeros(m+n,m*n);
for i = 1:m
    A(i,n*i-n+1:n*i)=ones(1,n);
end
for i = m+1:n+m
    A(i,i-m:n:n*m) = 1;
end
end

生成系数矩阵之后,原问题就可以转化为一般的线性规划问题直接求解。

3.指派问题

指派问题可以看做是特殊的运输问题,此时xij取0或1,m=n,ai=bj=1。

4.对偶理论与灵敏度分析

说实话,运筹学我没学过啊啊,这里也不懂诶,贴上一个B站up的链接
这部分的内容主要包括以下几个方面:

  • 线性规划与对偶线性规划相互转化
  • 对偶问题的性质:对称性、弱对偶性、无界性、最优性、对偶理论、互补松弛性
  • 灵敏度分析(某一个量改变最优解的变化情况):价值系数cj的灵敏度分析、资源限量bi的灵敏度分析、技术系数aij的灵敏度分析

主要用到的是单纯形法和对偶单纯形法。

二、章节习题解答

Q3

变化

Q4

%新建.m文件求系数矩阵
function A = portA2( Ain)
%portA 生成运输类问题的系数矩阵,原问题C矩阵为m行,n列
[m,n] = size(Ain);
A = zeros(m,m*n);
for i = 1:m
    for j = i:m:n*m
        A(i,j) = Ain(i,(j-i+m)/m);
    end
end
end

A = [5 10 0;7 9 12;6 8 0;4 0 11;7 0 0];
A = portA2(A);
C = [1 1 1 0 0 0 0 1.65 0 0 0 2.3 0 0 0].*(-1);
b = [6000;10000;4000;7000;4000];
Aeq = [1 1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 1 1 -1 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0];
beq = [0;0;0];
lb = zeros(15,1);
ub = [inf inf inf inf inf inf inf inf 0 0 0 inf 0 inf 0]';
[x y] = intlinprog(C,1:15,A,b,Aeq,beq,lb,ub)%该问题是一个整数规划问题
%最终所得的y值的相反数即为目标函数不包括常数项的最大值
%题外话,这个解出来的最优解有点小感觉,好像开工厂加工并不怎么赚钱,dog

Q5

%portA函数请看运输问题部分代码

Aeq = portA(4,4);
C = [15 18 21 24 19 23 22 18 26 17 16 19 19 21 23 17];
beq = ones(8,1);
[x favl] = intlinprog(C,1:16,[],[],Aeq,beq,zeros(16,1),ones(16,1)); %还是一个整数规划
X = reshape(x,[4,4])' %最终的X即为指派矩阵

Q6

C = [0.1 0.20 0.15 0.25 0.08 0.16 0.12 0.20];
A = [1 1 1 1 0 0 0 0;0 0 0 0 1 1 1 1;450/2+450/4+200 480/2+480/4+200 540/2+540/4+200 600/2+600/4+200 450/3+450/4+200 480/3+480/4+200 540/3+540/4+200 600/3+600/4+200];
b = [48 32 48000]';
C = C.*-1;
[x favl] = intlinprog(C,1:8,A,b,[],[],zeros(8,1));
X = reshape(x,[4,2])
favl = -favl
%favl为可以摧毁敌方军事基地的导弹的最大期望值

Q8

C = [1 1 2 2 3 3 4 4];
Aeq = [1 -1 -1 1 -1 1 1 -1;1 -1 -1 1 1 -1 -3 3;1 -1 -1 1 -2 2 3 -3];
beq = [0 1 -0.5];
lb = zeros(8,1);
[uv favl] = linprog(C,[],[],Aeq,beq,lb);
X = [uv(1:2:8)-uv(2:2:8)] %X为自变量的取值

Q9

%说实话不想敲了,和前面的题都差不多
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数学建模学习笔记——线性规划 的相关文章

  • 如何使用神经网络保存 Sift 特征向量进行分类

    SIFT 特征的 Matlab 实现发现于http www cs ubc ca lowe keypoints http www cs ubc ca lowe keypoints 在 stackoverflow 的帮助下 我想将功能保存到 m
  • Matlab 中的多行匿名函数? [复制]

    这个问题在这里已经有答案了 是否可以在 Matlab 中创建多行匿名函数 没有合适的例子在文档中 http www mathworks com help matlab matlab prog anonymous functions html
  • 在每次迭代中使用 for 循环的索引命名图像

    我正在使用 MATLAB 进行图像处理项目 我使用 for 循环在每次循环迭代时生成某种图像数据 图像大小不同 我的问题是如何阻止它在下一次迭代中覆盖图像 Img i j data 理想情况下我希望它有 Img 1 data for 1st
  • 在 Matlab 中保存当前运行的脚本

    有没有办法保存Matlab中当前运行的脚本 我有一个脚本 它会自动备份一组脚本 但如果我更改了当前脚本 则保存的版本将过期 也许可以调用一些java Thanks 在 Yair Altman 网站上的某个地方 请参阅我的其他答案中的链接 他
  • 在 Excel 中打印 MATLAB 图窗并调整其大小

    我在 MATLAB 中有两个带有手柄的图形hFig1 and hFig2 我想将它们打印到 Excel 中的特定单元格 单元格 E3 和 I3 并将它们重新调整为 2 英寸 x 3 英寸 我尝试过使用 AddPictures对象处理程序和使
  • 使用 GPU 进行 Matlab 卷积

    我用gpuArray尝试了matlab的卷积函数conv2 convn 例如 convn gpuArray rand 100 100 10 single gpuArray rand 5 single 并将其与 cpu 版本 convn ra
  • matlab mex 文件和 C++ dll (Windows)

    我有一个带有 Test 类的 DLL 标题 class MY EXPORT Test public int doit const string str 和来源 int Test doit const string str return in
  • Matlab:如何显示数组的“真实”值?

    我有一个在脚本中计算的向量 计算后 我将值显示到命令窗口 显示如下 finalResults 1 0e 05 0 0001 0 0 0005 0 0002 0 0001 0 0027 0 0033 0 0001 0 0000 0 0000
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • 检查Matlab中脚本需要使用的函数

    我有一个别人写的代码包 我正在运行一个脚本 它调用一些函数 这些函数又调用更多函数 等等 我想获取不是 MATLAB 内置函数但属于包的一部分的函数列表 我尝试使用matlab codetools requiredFilesAndProdu
  • 如何在 Matlab 中使用谷歌翻译?

    我正在编写一个程序 使用 Matlab 列出电影字幕文件中的所有唯一单词 现在我有一个独特的单词列表 我想将其翻译成我的语言并在观看电影之前了解其含义 有谁知道如何在 Matlab 中使用 Google Translate 以便完成我的脚本
  • MATLAB 中的多个捕获组

    我有一个包含数字或字母的字符串a 可能紧随其后的是r or l 在 MATLAB 中 以下正则表达式返回为 gt gt regexp 10r 0 9 a l r match ans 10r 我希望10 and r分开 因为我有两个捕获组 有
  • 如何在 Matlab 中对数组应用低通或高通滤波器?

    有没有一种简单的方法可以将低通或高通滤波器应用于 MATLAB 中的数组 我对 MATLAB 的强大功能 或数学的复杂性 有点不知所措 需要一个简单的函数或一些指导 因为我无法从文档或网络搜索中找到答案 看着那 这filter http w
  • 如何在没有安装Visual Studio的另一台机器上使用Visual Studio生成的dll?

    我已经在 Visual Studio 2012 中生成了动态库 我想在另一台机器上使用该库 但我不想在远程机器上安装 Visual Studio 我有 mex 库和 dll 我想运行一个使用这两个库的脚本 当我运行脚本时 出现以下错误 缺少
  • MATLAB 教程中的 SIFT 实现

    我正在寻找 MATLAB 中的一些基本 SIFT 实现 我需要从第一原则来写它 另外 我正在寻找一些可以解释程序中发生的事情的内容 Vedali 的代码和 David Lowe 的代码超出了我的理解范围 如果您是 Matlab 用户 您一定
  • MATLAB:具有复数的 printmat

    我想使用 MATLAB 的printmat显示带有标签的矩阵 但这不适用于复数 N 5 x rand N 1 y rand N 1 z x 1i y printmat x y z fftdemo N 1 2 3 4 5 x y x iy O
  • 黑白随机着色的六角格子

    我正在尝试绘制一个 10 000 x 10 000 随机半黑半白的六边形格子 我不知道如何将该格子的六边形随机填充为黑色和白色 这是我真正想要从这段代码中得到的示例 但我无法做到 https i stack imgur com RkdCw
  • 如何使用 MATLAB 的 substruct 函数创建表示使用“end”的引用的结构?

    我想使用substruct http www mathworks com help matlab ref substruct html函数创建一个结构体以供使用subsref 目的是使用索引字符串subsref而不是通常的 符号 因为我正在
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和
  • 如何更改Plotyy第二轴的颜色和字体大小?

    我使用 MATLAB 的plotyy 函数绘制了两条曲线 AX H1 H2 plotyy voltage span amplitude voltage span Ca SR The problem is that I cannot chan

随机推荐

  • C语言_指针

    C语言指针 指针 这个要从直接访问与间接访问说起 在程序中一般通过变量名来引用变量的值 程序通过编译后就会把变量名转化为变量的地址 通过地址对数据进行存取操作 这种方式称为直接访问 而间接访问是将变量i的地址存放在另一变量中 然后通过该变量
  • 手写Spring框架(四)

    逻辑梳理 这部分完成AOP部分 先梳理AOP的步骤 getBean 方法作为入口 而后是几个关键的类 Context在前文都有提到 现在解释一下其他的类 AdviseSupport 通知的工具类 完成配置文件的解析 将Advise和目标类的
  • Spring bean的生命周期

    学习spring源码主框架 从源码角度开发学习Spring bean的生命周期 spring创建bean方法org springframework beans factory support AbstractBeanFactory getB
  • 程序员成长为架构师必备的十项技能

    一 卓越的程序员 1 每个好架构师都是一位出色的程序员 架构师 听起来是如此神秘的一个称号 尤其是在开发领域刚入门不久的菜鸟级程序员眼中 架构师都是高手 都是牛人 都是如此高高在上的存在 不过 在搞了四 五年编程之后 程序员们往往早已失去了
  • 【IT之路】LoadRunner系列-Win7 64bit下搭建Loadrunner11破解版

    一直想提升下性能测试知识 但是都因为这样那样的原因 没有实际上系统梳理下 在此 刚好空出时间来了 一步步把性能测试知识重新拾一下 本文介绍的是在vmware的环境下进行的Loadrunner环境搭建 一 环境准备 Win7 64bit Lo
  • 云计算基础知识:

    云计算 cloud computing 是分布式计算的一种 指的是通过网络 云 将巨大的数据计算处理程序分解成无数个小程序 然后 通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户 云计算早期 简单地说 就是简单的分布式计
  • 数据结构(一)数组

    概述 说起数组我们都不陌生 几乎在每一种编程语言中 基本上都会有数组这种数据类型 不仅如此它还是是最基础最简单的数据结构 尽管如此 可能还是有一些人并没有真正的理解这个基础数据结构的精髓所在 首先 我们都知道 在java中数组是从 0 开始
  • Linux-epoll机制

    主要接口 epoll create epoll ctl epoll wait epoll create 头文件 include
  • Windows核心编程:字符和字符串处理

    Windows核心编程 字符和字符串处理 1 字符编码 ANSI 字符 一个字符一字节 8位 最多只能表达256个字符 UTF 的全称是Unicode Transformation Format Unicode转换格式 UTF 16 将 每
  • Transformer哲学

    一切苦痛 皆为过往 当我们科研遇到困难时 请大胆寻求Transformer的帮助吧 Transformer用一种苍老的声音问询 你有什么 你要什么 你怎么给我这些东西 一个翻译任务 我有英文 我需要中文 我以embedding形式给 一个目
  • Spring的@Component 、@Value 和 Springboot 的 @Component 、@ConfigurationProperties 使用

    application yml配置 book name 一个人的朝圣 author 蕾秋 乔伊斯 age 35 Spring的 Value 程序代码里 Spring主要在 Value注解的参数中使用EL表达式 注入普通字符串 注入操作系统属
  • C++异常处理机制的详细介绍

    1 C 异常处理的套路 1 1 C 异常处理机制之抛出异常关键字 throw 1 2throw关键字的使用 在哪可能出现异常就在哪里使用throw关键字抛出异常 这个异常可以使用一个常量 字符串 或类对象 都可以来抛出 throw 常量 字
  • 最佳买卖股票时机含冷冻期

    题目 给定一个整数数组 其中第 i 个元素代表了第 i 天的股票价格 设计一个算法计算出最大利润 在满足以下约束条件下 你可以尽可能地完成更多的交易 多次买卖一支股票 你不能同时参与多笔交易 你必须在再次购买前出售掉之前的股票 卖出股票后
  • 手游SDK-悬浮球

    一 游戏内显示悬浮球 手游SDK的悬浮球和一般的悬浮窗有点不一样 它只需要在游戏内显示即可 不需要也不能在桌面中显示出来 所以如果使用WindowManager创建悬浮窗 需要监听App是否在前台 如果在 则显示 如果不在则隐藏悬浮窗 而A
  • yolov7 姿态 pose训练部署笔记

    目录 pytorch开源相关资料 有tensorrtc 代码 预测时间测试结果 导出onnx代码
  • oppor15android版本8.1,OPPO R15搭载最新ColorOS 5.0系统,基于安卓8.1更好用

    原标题 OPPO R15搭载最新ColorOS 5 0系统 基于安卓8 1更好用 手机的发展十分之快 硬件性能普遍过剩 而手机系统的更新迭代变得异常重要 而越来越多的消费者也意识到这个问题 想获得更好的使用体验 不仅仅是硬件上的支持 操作系
  • Unity学习日志_动画系统简介

    Unity学习日志 动画系统简介 Animation Legacy动画系统 若要使用Animation 需要在创建Clip之前为物体手动添加Animation组件 Animation组件面板 属性 Animation 动画片段 Animat
  • Linux安装cuda如何修改目录,Ubuntu 18.04下安装CUDA 9.1或者9.2详细步骤

    在Ubuntu 18 04操作系统下安装CUDA 9 1 9 1 85 或者CUDA 9 2 9 2 148 版本的详细步骤 本文以安装CUDA 9 1为例 如果是安装CUDA 9 2 则相关参数修改为CUDA 9 2匹配的即可 1 下载c
  • vue项目运行至ipad白屏问题

    Vue做了一个单页面应用 它在一切设备上都工作正常 在调试另一个dug时 发现了这个问题 项目在其他端都可以正常打开 只有在paid上打开时 显示的是白屏状态 在刚开始解决这个问题时 花费了好几个小时都没解决 都准备从新编译代码了 发现并没
  • 数学建模学习笔记——线性规划

    数学建模学习笔记 线性规划 一 基础知识储备 1 线性规划 1 1标准形式 1 2非标准形式 1 3多目标规划 2 运输问题 3 指派问题 4 对偶理论与灵敏度分析 二 章节习题解答 Q3 Q4 Q5 Q6 Q8 Q9 本文章为 数学建模算