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

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(使用前将#替换为@)

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

  • 在 MATLAB 中绘图后恢复轴

    从文本文件绘制多种方法的输出后 未显示轴的右侧和上侧 我需要拥有它们并将它们加粗 就像当前的轴一样 绘制的数据来自存储每种方法数据的文件 每个数据文件都是一个 256x2 文件 包含 0 1 之间的值 第一列是精度 第二列是召回率 figu
  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得
  • 如何在 MATLAB 中将矩阵元素除以列总和?

    有没有一种简单的方法可以将每个矩阵元素除以列和 例如 input 1 4 4 10 output 1 5 4 14 4 5 10 14 以下是执行此操作的不同方法的列表 使用bsxfun https www mathworks com he
  • 像matlab一样在python中连接数组而不知道输出数组的大小

    我正在尝试在 python 中连接数组 类似于 matlab array1 zeros 3 500 array2 ones 3 700 array array1 array2 我在 python 中做了以下操作 array1 np zero
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • Matlab strcat 不返回字符串?

    imgstr 无法识别 strcat 的输出字符串 homedir C Users images for img 01 bmp 02 bmp 03 bmp imgstr strcat homedir img I imread imgstr
  • 霍夫变换检测和删除线

    我想使用霍夫变换检测图像中的线条 但是我不想绘制线条 而是想删除原始图像中检测到的每条线条 image imread image jpg image im2bw image BW edge image canny imshow BW fig
  • 在 Python 上显示 Matlab mat 文件中的图像

    我目前正在尝试显示从此下载的 Mat 文件中的图像site http www rctn org bruno sparsenet 这是一个 mat 文件 所以我尝试使用 scipy io loadmat 函数加载它 但我似乎无法绘制图像 我究
  • 基本矩阵错误?

    我试图通过扫描从相机拍摄的两个图像 检测图像中的特征 匹配它们 创建基本矩阵 使用相机内在函数计算基本矩阵 然后分解它以找到旋转和翻译 这是matlab代码 I1 rgb2gray imread 1 png I2 rgb2gray imre
  • 在Matlab图例中使用Latex?

    我的 matlab 不接受我的 Latex 例如 如果我使用legend b 6 rightarrow b 7 它没有向我显示箭头 我该如何解决这个问题 尝试使用 Latex 解释器 例如 legend b 6 rightarrow b 7
  • GO TO 语句 - Fortran 到 Matlab

    我一直在努力将此网格搜索代码从 Fortran 转换为 Matlab 但是我无法正确合并 GO TO 语句 我正在尝试使用 while 循环 但我认为我需要其他东西来结束搜索 任何帮助将不胜感激 vmax 1 0E 15 amax G 1
  • 使用 scipy.io 将 python pandas dataframe 转换为 matlab 结构

    我正在尝试使用 scipy io 将 pandas 数据帧保存到 matlab mat 文件 我有以下内容 array1 np array 1 2 3 array2 np array a b c array3 np array 1 01 2
  • MATLAB 符号替换

    我知道在 MATLAB 中如果声明了 syms x y f x 2 y 2 grad gradient f 然后grad会存储值 2 x 2 y 如果我想评估梯度 2 2 I use subs f x y 2 2 这返回 4 4 我正在编写
  • 如何从列中创建对称矩阵?

    例如 我想转动以下列 90 175 600 650 655 660 代入矩阵 90 175 600 650 655 660 175 600 650 655 660 655 600 650 655 660 655 650 650 655 66
  • Python 中的 eig(a,b) 给出错误“需要 1 个位置参数,但给出了 2 个”

    根据https docs scipy org doc numpy 1 15 0 user numpy for matlab users html https docs scipy org doc numpy 1 15 0 user nump
  • 静态时序数据的数据库解决方案

    我们拥有一个庞大且不断增长的实验数据集 该数据集取自约 30 000 名受试者 对于每个主题 都有多个数据记录 在每个记录中 收集了多个生理数据时间序列 每个时间序列约 90 秒长 并以 250Hz 采样 我应该注意到 时间序列的任何给定实
  • 如何在 MATLAB 中为 4 个子图创建一个通用图例?

    如何在 MATLAB 中为 4 个子图创建一个通用图例 如下所示 又快又脏 hSub subplot 3 1 1 plot 1 1 1 1 1 1 1 1 hLegend legend hello i am legend subplot 3
  • 如何使用神经网络保存 Sift 特征向量进行分类

    SIFT 特征的 Matlab 实现发现于http www cs ubc ca lowe keypoints http www cs ubc ca lowe keypoints 在 stackoverflow 的帮助下 我想将功能保存到 m
  • 通过 h5py 将 matlab v7.3 文件读入 python numpy 数组列表

    我知道以前已经有人问过这个问题 但在我看来 仍然没有答案可以解释正在发生的事情 并且不适用于我的情况 我有一个 matlab v7 3 文件 其结构如下 gt rank lt 1x454 cell gt gt each element is
  • Matlab 中是否有相当于 R 的 dput() 的函数?

    Matlab 中是否有相当于 R 的 dput 的函数 dput 将 R 对象的 ASCII 文本表示形式写入文件或连接 UPDATE 1 添加了递归和对单元格的支持 UPDATE 2 添加了对结构的支持 UPDATE 3 增加了对逻辑 整

随机推荐

  • 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 本文章为 数学建模算