首页 > 其他分享 >线性规划在数学建模中的两道例题

线性规划在数学建模中的两道例题

时间:2024-08-10 21:16:15浏览次数:8  
标签:Aeq 工序 12 fval 线性规划 建模 约束 例题 向量

目录

一、生产决策问题

1.问题分析

本题最终是要求一个利润最大化,由此得知是一个规划问题,因此我们需要设定一些符号,将目标函数写出来,再进一步写出约束

2.模型建立

(1)符号设定

由于三种产品需要经过两道工序,两道工序中又分别有不同的机器,不妨把一种产品经过一道工序设为一个变量,这样才能不重不漏。
因此对产品I来说,设以A1、A2,完成A工序的产品分别为x1、x2件,转入B工序时,以 B1、B2、B3完成B工序的产品分别为x3、x4、x5件;对产品Ⅱ来说,设以A1、A2完成A工序的产品分别为x6、x7件,转入B工序时,以B1完成B工序的产品为x8件;对产品Ⅲ来说,设以A2完成A工序的产品为x9件,则以B,完成B工序的产品也为x9件。
此外,每一种产品经过A工序和B工序的产品数量是一样的,因此我们需要加上约束:x1+x2=x3+x4+x5;x6+x7=x8

(2)目标函数建立

先计算出某种设备平均每台时需要的费用,再用产品单件工时乘以这个值,就可以得到某工件再设备上所花费用

(3)约束建立

3.代码求解

(1)输入系数向量

因为我们的变量有9个,因此先初始化一个9行的列向量,再往里面添数

format long g   %可以将Matlab的计算结果显示为一般的长数字格式(默认会保留四位小数,或使用科学计数法)
c = zeros(9,1); % 初始化目标函数的系数向量全为0
c(1) = 1.25 -0.25 -300/6000*5;  % x1前面的系数是c1
c(2) = 1.25 -0.25 -321/10000*7;
c(3) = -250 / 4000 * 6;
c(4)  = -783/7000*4;
c(5) = -200/4000 * 7;
c(6) = -300/6000*10;
c(7) = -321 / 10000 * 9;
c(8) = 2-0.35-250/4000*8;
c(9) = 2.8-0.5-321/10000*12-783/7000*11;
c = -c;  % 我们求的是最大值,所以这里需要改变符号

(2)输入不等式约束

我们有9个变量,因此矩阵的列数为9,又由于我们有5个约束,因此行数为5。初始化的好处就是,直接往里面添数即可,不需要的地方直接为0。

A = zeros(5,9);
A(1,1) = 5;  A(1,6) = 10;
A(2,2) = 7;  A(2,7) = 9; A(2,9) = 12;
A(3,3) = 6;  A(3,8) = 8;
A(4,4) = 4;  A(4,9) = 11;
A(5,5) = 7;  
b = [6000 10000 4000 7000 4000]';

(3)输入等式约束与上下界

Aeq = [1 1 -1 -1 -1 0 0 0 0;
            0 0 0 0 0 1 1 -1 0];
beq = [0 0]';
lb = zeros(9,1);

(4)进行求解

[x fval] = linprog(c, A, b, Aeq, beq, lb)
fval = -fval
% fval =
% 1146.56650246305
% 注意,本题应该是一个整数规划的例子,我们在后面的整数规划部分再来重新求解。
intcon = 1:9;
[x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,lb)
fval = -fval

二、投料问题

1.问题分析

本题也是一个规划问题,规划问题的第一要素就是要定义变量,然后写出目标函数与约束。所定义的变量一定是要便于在编程中好体现写出目标函数与约束的。首先在约束中,我们肯定是想写出距离矩阵,然后再定义一个矩阵,代表i料场向j工地运输aij吨,这样求点积分使其最小就可以了。但遗憾的是matlab对线性规划的标准型不允许矩阵的存在,因此我们的变量只能是一个列向量,在处理的时候,将这个向量拼凑成一个矩阵即可

2.模型建立

(1)符号设定


(2)目标函数建立

(3)约束建立

3.代码求解

(1)输入系数向量

这里计算距离非常巧妙,让把j的循环写在前面,让后再循环i,分别得到料场到工地的距离

a=[1.25  8.75  0.5  5.75  3  7.25];  % 工地的横坐标
b=[1.25  0.75  4.75	5  6.5  7.25];   % 工地的纵坐标
x = [5  2];  % 料场的横坐标
y = [1  7];  % 料场的纵坐标
c = [];  % 初始化用来保存工地和料场距离的向量 (这个向量就是我们的系数向量)
for  j =1:2
    for i = 1:6
        c = [c;  sqrt( (a(i)-x(j))^2 + (b(i)-y(j))^2)];  % 每循环一次就在c的末尾插入新的元素
    end
end

(2)输入不等式约束

我们有12个变量,因此矩阵的列数为12,又由于我们有2个约束,因此行数为2。

A =zeros(2,12);
A(1,1:6) = 1;
A(2,7:12) = 1;
b = [20,20]';

(3)输入等式约束与上下界

Aeq = zeros(6,12);  
for i = 1:6
    Aeq(i,i) = 1;  Aeq(i,i+6) = 1;
end
% Aeq = [eye(6),eye(6)]  % 两个单位矩阵横着拼起来
beq = [3 5 4 7 6 11]';  % 每个工地的日需求量
lb = zeros(12,1);

(4)进行求解

[x fval] = linprog(c, A, b, Aeq, beq, lb)
x = reshape(x,6,2)  % 将x变为6行2列便于观察(reshape函数是按照列的顺序进行转换的,也就是第一列读完,读第二列,即x1对应x_1,1,x2对应x_2,1)

标签:Aeq,工序,12,fval,线性规划,建模,约束,例题,向量
From: https://www.cnblogs.com/dlmuwxw/p/18352753

相关文章

  • 【MATLAB源码】数学建模基础教程(2)--层次分析法(评价类算法)
    系列文章目录在最后面,各位同仁感兴趣可以看看!层次分析法引言一、层次分析法的特点二、模型的建立求解过程(1)问题的提出:实际问题的转化(2)建立层次结构模型(3)构造判断(成对比较)矩阵(4)一致性检验:三、层次分析法的优点与局限代码开源最后:总结系列文章目录引言层次分析......
  • matlab求解线性规划问题
    在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支--数学规划,而线性规划(LinearProgramming,LP)则是数学规划的一个重要分支。本章会介绍线性规划模型与matlab求解目录一、线性规划的标准形二、linprog函......
  • 【保奖思路】2024年华为杯研究生数学建模D题解题思路分享(点个关注,后续会更新
    您的点赞收藏是我继续更新的最大动力!一定要点击如下的卡片链接,那是获取资料的入口!点击链接加入群聊【2024华为杯研赛资料汇】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=MwNruKbEvR9aZns1l7xXBWmQQKYAEh-F&authKey=igaBN79pz6BhNlDQ6TIZ5YFAbn71aDcYL77uANPquLF%2FTVgeSAhE......
  • 【保奖思路】2024年华为杯研究生数学建模D题解题思路分享(点个关注,后续会更新
    您的点赞收藏是我继续更新的最大动力!一定要点击如下的卡片链接,那是获取资料的入口!点击链接加入群聊【2024华为杯研赛资料汇】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=MwNruKbEvR9aZns1l7xXBWmQQKYAEh-F&authKey=igaBN79pz6BhNlDQ6TIZ5YFAbn71aDcYL77uANPquLF%2FTVgeSAhE......
  • 【数学建模导论】Task05 多模数据与智能模型
    前言在多模数据中,涉及以下领域数字图像处理与计算机视觉计算语言学与自然语言处理数字信号处理与智能感知多模态学习——融合不同的数据类型(如图像和文本):是机器学习的一个重要分支。是处理复杂数据分析问题的关键❤️❤️❤️❤️❤️系列文章导航【数学建模导论】Ta......
  • 数学建模——线性规划模型
    前言:当学习完线性规划模型,我感觉到了数学建模的“细腻”之处,也可以从中感觉到他“细腻”的美感,为此想记录一下我学习数学建模的一些笔记跟心得。线性规划模型一般是求解最大值最小值问题,如果目标函数f(x)和约束条件均是决策变量的线性表达式,(即没有平方项和乘积项),那么此时的数......
  • phar反序列化例题二
    phar反序列化例题二[SWPUCTF2018]SimplePHP1文件下载url处发现文件可下载,此处不贴出来了,不占太多篇幅代码审计class.php处提示phar反序列化,base.php提示flag在f1ag.php然后开始捋关系index.phpindex.php包含了base.php(写有文件上传、查看的页面)。base.phpbase.php可......
  • 【总结】注册码泄露原理以及例题
    引言题目给了小明的机器码:1653643685031597用户user_id:xiaoming可以看到题目采用了SIMD指令集该指令格式在CTF和攻防对抗中经常出现,可以提高执行效率的同时也可以增加逆向的难度。对于此类指令和题目,我们分析的方法是:遇到查意思,查的多了就跟看正常代码一样,采用动态分析。机......
  • 基于simulink的分布式发电系统自动重合闸的建模与仿真分析
    1.课题概述      在配电系统中,80%-90%的故障都是瞬时故障。发生故障时,线路被保护迅速断开,随即重合闸。当分布式电源接入配电网后,线路发生故障后重合闸,此时分布式电源没有跳离线路,这将产生两种潜在威胁,即非同期重合闸和故障点电弧重燃。      非同期重合闸:当线路......
  • C语言典型例题28
    《C程序设计教程(第四版)——谭浩强》习题2.5输入一个华氏温度,要求输出摄氏温度。公式为C=5/9(F-32),要求输出要有文字说明,取两位小数数学知识:(1)华氏温度与摄氏温度(FahrenheittemperatureandCelsiustemperature),是两大国际主流的计量温度的标准。(2)华氏温标由来华氏温标:......