数学建模1:lingo软件求解优化模型


本次数学建模学习笔记系列,以代码学习为主,附带建模及论文亮点记录
由于队友为两位经济学小伙伴,因此以大数据类型题目为主要学习方向
注:论文代码资料来源网络

2014C题

1、结构清晰(后附该论文前两问的目录结构)
2、lingo求解优化模型,涉及函数循环与求和
3、表格很好看
4、关于sets,参考
https://blog.csdn.net/qq_47925836/article/details/119088653
5、代码和论文的结果没太明白,感觉优化过?

在这里插入图片描述

问题一(求解母猪年均产仔量以达到或超过盈亏平衡点)

盈亏平衡方程、多元函数建立计算模型、求解盈亏平衡问题

一、数据准备
1.搜集相关数据
在这里插入图片描述
2.确定养殖周期

二、利用盈亏平衡分析法确定产仔量
1.求解养殖总成本
(1)种猪饲养成本
(2)后备种猪饲养成本
(3)生猪饲养成本
(4)变动成本
(5)总成本
2.求解总收入
3.根据盈亏平衡点求解产仔量
在这里插入图片描述
三、结果分析(亮点!!!)

在 2014 年养猪行情下,不论采取何种配种方式和养殖周期该养殖场均无法达到盈亏平衡,
因此我们分析,若该养殖场在前两年的猪市行情下进行养殖可能会达到盈亏平衡。
所以我们又对 2013 年和 2012 年的猪市行情进行了调查,利用这两年的养殖成本和销售价格等数据对该养殖场的盈亏平衡点和母猪年均产仔量进行求解

在这里插入图片描述
四、相关建议
通过以上对问题的求解并结合猪市行情,我们给出当前形势下生猪养殖产业的一些相关建议

问题二(求解小猪选为种猪的比例和母猪的存栏数)

母猪每年可以产两胎,每胎可以成活 9 只小猪,求使得该养殖场养殖规模达到饱和时,小猪选为种猪的比例和母猪的存栏数

一、数据准备
1.种猪淘汰率
2.公母种猪比例

二、求解比例和存栏数
1.模型准备
1)目标建立
对小猪z、母猪l和公猪w数量建立整数规划
2)条件约束
(1)养殖场最大养殖规模约束
(2)小猪数量约束约束
(3)公猪母猪比例约束
2.模型建立

在这里插入图片描述
3.模型求解
代码(部分修改)
小猪z、母猪y和公猪x

max=x+@floor(x*0.45)+1+y+@floor(y*0.3)+1+z;
x+@floor(x*0.45)+1+y+@floor(y*0.3)+1+z<=10000;
y*9=z+@floor(x*0.45)+1+y+@floor(y*0.3)+1;
x=(1/24)*y;
@gin(x);
@gin(y);
@gin(z);
@floor(y*0.3)+1=a;
@floor(x*0.45)+1=b;
(a+b)/((2*z+@floor(x*0.45)+1+y+@floor(y*0.3)+1))*100=p;

结果表

在这里插入图片描述

在这里插入图片描述
结果可能被优化过,感觉不配套。。。。
在这里插入图片描述

问题三(确定最佳经营策略,计算年均利润)

一、拟合饲料价格与销售价格关系
1.建立函数关系
2.利用最小二乘法拟合
(1)模型准备
①目标建立
②约束条件
(2)模型建立
(3)模型求解

二、确定未来三年饲料价格

在这里插入图片描述

三、养殖场三年时间流程图
在这里插入图片描述

四、确定最佳经营策略和年均利润
1.数据准备
2.模型准备
1)目标建立
2)条件约束
3.模型建立

在这里插入图片描述
4.模型求解
代码 B Q M d
对应代码中 n q e w

第一步

sets:
bb/1..109/:a,b,c;
aa/1..6/:;
cc(aa,bb):f,p;

endsets
data:
a=@text('D:\roujia.txt');
b=@text('D:\biandongfeiyong.txt');
c=@text('D:\tianshujiange.txt');
enddata
max=n-q-e-w;
n=@sum(cc(i,j):a(j)*f(i,j)*100*8543)+8543*a(2);
q=@sum(cc(i,j):(c(j)*f(i,j)-c(j)*p(i,j)))*8543*1.5*3+8543*130*1.5*3;
e=@sum(bb(j):1452*(a(j)-7.3371)/2.3888*2.5*10);
w=@sum(cc(i,j):f(i,j)*8543*b(j))+1452*120;
@for(aa(i):@sum(bb(j):c(j)*f(i,j)-c(j)*p(i,j))>=150);
@for(aa(i)|(i#le#5):@sum(bb(j):f(i+1,j)*c(j)-f(i,j)*c(j))>=150);
!@for(aa(i)|(i#le#5):@sum(bb(j):f(i+1,j)*c(j)-f(i,j)*c(j))<=180);
@for(aa(i)|(i#le#5):@sum(bb(j):p(i+1,j)*c(j)-p(i,j)*c(j))>=180);
@for(aa(i):@sum(bb(j):f(i,j))<=1);
@for(aa(i):@sum(bb(j):p(i,j))<=1);
@for(cc(i,j):@bin(f(i,j)));
@for(cc(i,j):@bin(p(i,j)));

在这里插入图片描述
结果表
在这里插入图片描述

附表(部分)

在这里插入图片描述

在这里插入图片描述

5.结果分析

问题四

在这里插入图片描述
在这里插入图片描述

sets:
bb/1..109/:a,b,c,x,y;
aa/1..6/:;
cc(aa,bb):f,p;
endsets
data:
a=@text('D:\roujia.txt');
b=@text('D:\biandongfeiyong.txt');
c=@text('D:\tianshujiange.txt');
f=@text('D:\f.txt');
p=@text('D:\p.txt');
enddata
max=n-q-e-w;
n=@sum(cc(i,j):a(j)*f(i,j)*100*9*x(j)*0.98)+8479*a(2);
q=@sum(cc(i,j):(c(j)*f(i,j)-c(j)*p(i,j))*9*x(j)*0.98*1.5*3)+8479*130*1.5*3;
e=@sum(bb(j):x(j)/0.96*(a(j)-7.3371)/2.3888*2.5*10);
w=@sum(cc(i,j):f(i,j)*9*x(j)*0.98*b(j))+@sum(bb(j):x(j)/0.96)/109*120;
!@for(aa(i):@sum(bb(j):c(j)*f(i,j)-c(j)*p(i,j))>=150);
!@for(aa(i)|(i#le#5):@sum(bb(j):f(i+1,j)*c(j)-f(i,j)*c(j))>=150);
!@for(aa(i)|(i#le#5):@sum(bb(j):p(i+1,j)*c(j)-p(i,j)*c(j))>=180);
x(1)=1110;
@for(bb(j):x(j)<=1110);
@for(bb(j):x(j)>=24);
!@for(bb(j)|(j#le#108):@if(x(j+1)#ge#x(j),x(j+1)*0.1,x(j)*0.1)=@abs(x(j+1)-x(j)));
@for(bb(j)|(j#le#108):@abs(x(j)-x(j+1))<=x(j)*0.01);
!@for(aa(i):@sum(bb(j):f(i,j))<=1);
!@for(aa(i):@sum(bb(j):p(i,j))<=1);
@for(cc(i,j):@bin(f(i,j)));
@for(cc(i,j):@bin(p(i,j)));
@for(bb(j):x(j)*1.3=y(j));

母猪数量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模型推广与评价

1.模型评价
好的方面:
1.对所收集来的数据进行整理,并对其进行筛选,将合理数据用于计算中;
2.利用拟合最小二乘法来分析预测数据,更加具有说服力和理论性;
3.结合不同种实际情况,使所建立的模型更加科学、合理。
有待改进的地方:
1.本模型所收集的数据有限,计算精度不高,得到的结果可能同实际情况有所出入。

2.模型推广
所建立的模型考虑到的因素比较全面,并详细的给出了经营策略,可以应用到实际规划中。
根据文中所建立的模型,依据近几年市场价格涨跌趋势,预测未来几年市场营销情况,即可以提前做出预判。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种立最优化模型的语言,可以简便地表达大规问题,利用LINGO高效的求解器可快速求解并分析结果。 §1 LINGO快速入门 当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO求解如下的LP问题: 在模型窗口中输入如下代码: min=2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。 例1.2 使用LINGO软件计算6个发点8个收点的最小费用运输问题。产销单位运价如下表。 单 位 销地 运 价 产地 B1 B2 B3 B4 B5 B6 B7 B8 产量 A1 6 2 6 7 4 2 5 9 60 A2 4 9 5 3 8 5 8 2 55 A3 5 2 1 9 7 4 3 3 51 A4 7 6 7 3 9 2 7 1 43 A5 2 3 9 5 7 2 6 5 41 A6 5 5 2 2 8 1 4 3 52 销量 35 37 22 32 41 32 43 38 使用LINGO软件,编制程序如下: model: !6发点8收点运输问题; sets: warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand; links(warehouses,vendors): cost, volume; endsets !目标函数; min=@sum(links: cost*volume); !需求约束; @for(vendors(J): @sum(warehouses(I): volume(I,J))=demand(J)); !产量约束; @for(warehouses(I): @sum(vendors(J): volume(I,J))<=capacity(I)); !这里是数据; data: capacity=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end 然后点击工具条上的按钮 即可。 为了能够使用LINGO的强大功能,接着第二节的学习吧。 §2 LINGO中的集 对实际问题的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO语言的优势。 现在我们将深入介绍如何创集,并用数据初始化集的属性。学完本节后,你对基于技术的集如何引入模型会有一个基本的理解。 2.1 为什么使用集 集是LINGO语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规较大的模型。 2.2 什么是集 集是一群相联系的对象,这些对象也称为集的成员。一个集可能是一系列产品、卡车或雇员。每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。属性值可以预先给定,也可以是未知的,有待于LINGO求解。例如,产品集中的每个产品可以有一个价格属性;卡车集中的每辆卡车可以有一个牵引力属性;雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日属性等等。 LINGO有两种类型的集:原始集(primitive set)和派生集(derived set)。 一个原始集是由一些最基本的对象组成的。 一个派生集是用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。 2.3 模型的集部分 集部分是LINGO模型的一个可选部分。在LINGO模型中使用集之前,必须在集部分事先定义。集部分以关键字“sets:”开始,以“endsets”结束。一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分。一个集部分可以放置于模型的任何地方,但是一个集及其属性
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是Yu欸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值