2014年国赛高教杯数学建模
C题 生猪养殖场的经营管理
某养猪场最多能养10000头猪,该养猪场利用自己的种猪进行繁育。养猪的一般过程是:母猪配种后怀孕约114天产下乳猪,经过哺乳期后乳猪成为小猪。小猪的一部分将被选为种猪(其中公猪母猪的比例因配种方式而异),长大以后承担养猪场的繁殖任务;有时也会将一部分小猪作为猪苗出售以控制养殖规模;而大部分小猪经阉割后养成肉猪出栏(见图1)。母猪的生育期一般为3~5年,失去生育能力的公猪和母猪将被无害化处理掉。种猪和肉猪每天都要消耗饲料,但种猪的饲料成本更高一些。养殖场根据市场情况通过决定留种数量、配种时间、存栏规模等优化经营策略以提高盈利水平。请收集相关数据,建立数学模型回答以下问题:
1. 假设生猪养殖成本及生猪价格保持不变,且不出售猪苗,小猪全部转为种猪与肉猪,要达到或超过盈亏平衡点,每头母猪每年平均产仔量要达到多少?
2. 生育期母猪每头年产2胎左右,每胎成活9头左右。求使得该养殖场养殖规模达到饱和时,小猪选为种猪的比例和母猪的存栏数,并结合所收集到的数据给出具体的结果。
3. 已知从母猪配种到所产的猪仔长成肉猪出栏需要约9个月时间。假设该养猪场估计9个月后三年内生猪价格变化的预测曲线如图2所示,请根据此价格预测确定该养猪场的最佳经营策略,计算这三年内的平均年利润,并给出在此策略下的母猪及肉猪存栏数曲线。
整体求解过程概述(摘要)
本文主要研究的是生猪养殖场的优化经营管理问题,通过考虑留种数量、配种时间、存栏规模以及所给出的价格预测等因素,结合所收集的数据,给出该养猪场的最佳经营策略。
在问题一中,以达到或超过盈亏平衡点为条件,研究每头母猪的平均年产仔量。结合盈亏平衡方程,以种猪养殖成本、肉猪养殖成本及变动成本的总和与所卖肉猪的总收入相等为目标,运用多元函数建立计算模型,求解得到在2014年市场价格的情况下不存在盈亏平衡,而在2012、2013年要达到盈亏平衡,养殖周期为三年的母猪在人工授精条件下平均年产仔量为7头。
在问题二中,为了得到养殖场养殖规模达到饱和时,小猪选为种猪的比例和母猪的存栏数。以种猪、肉猪、后备种猪总数量最大为目标,以总数量不大于10000头,所有母猪的产仔总数等于后备种猪和肉猪数量的总和,种猪中的公、母猪符合配比为约束条件,建立优化模型,利用lingo软件求得养殖场养殖规模达到饱和时的各类猪的数量(见正文),通过引入淘汰率建立计算模型进行计算,得到人工授精条件下的小猪选为种猪比例为1.81%,母猪存栏数(包括后备母猪)为1444头。
在问题三中,通过调查,运用最小二乘法对猪肉价格与粮食价格的关系进行拟合,得到两者间的函数关系。结合问题二中的数据,以总盈利最大为目标,以两次生产间隔不少于180天,两次肉猪出栏的间隔不少于150天,同一批肉猪生产与出栏的时间间隔不少于150天为约束条件,建立优化模型,利用lingo软件求得在母猪数量不发生变化情况下的生产时间和出栏时间。
在上一步模型的基础上,将结果转换为条件,以母猪数量作为未知量,添加母猪数量上限以及数量变化规律两个约束条件,建立优化模型,利用lingo软件求得三年内的平均年利润为833.4287万元。
模型假设:
为了简化计算,给出生猪养殖过程中的合理假设:
假设一:在养殖过程中,不存在导致猪数量减少的外在因素;
假设二:在销售过程中,所有达到出栏标准的猪体重相等且皆可卖完;
假设三:在养殖过程中不会发生猪流感等特大疫情。
问题分析:
根据题目要求,该养殖场的最大养殖规模为10000头猪,并且用自己的种猪进行繁育配种。我们需要查阅相关资料,根据查阅到的数据对问题进行求解。
在第一问中,要求解该养殖场达到或超过盈亏平衡点时每头母猪的年均产仔量。通过分析题目,首先,我们对解题过程中可能会用到的相关数据进行了准备,包括根据题目要求确定养殖周期,搜集有关当前形势下种猪生猪的饲养费用,生猪的销售价格和公种猪、母种猪的配种比例等数据。其次对该养殖场的总支出和总收入分别进行计算并利用盈亏平衡分析法求解盈亏平衡点,再根据盈亏平衡点确定该养殖场每头母猪的年均产仔量。考虑到实际情况,由于我们搜集的是当前(2014年)猪市行情下的数据,因此我们认为在解题过程中可能会存在没有盈亏平衡点的现象,即养殖厂一直处于亏损状态。因此我们分别对这两种情况进行分析,若存在平衡点,则根据平衡点求解母猪的年均产仔量;若不存在盈亏平衡点,再对前两年的市场行情进行调查,根据前两年的相关数据对盈亏平衡点进行计算,最终求解母猪的年均产仔量。最后,根据市场行情对生猪养殖行业提出一些合理性的建议。
在第二问中,题目规定每头母猪每年可以产两胎,每胎可以成活9只小猪,求使得该养殖场养殖规模达到饱和时,小猪选为种猪的比例和母猪的存栏数。首先我们通过查阅相关资料得知,种猪每年都有淘汰率,因此我们首先确定了种猪的淘汰率,并沿用了问题一中的两种配种方式下公母种猪的数量比例。其次我们以该养殖场猪的数量最大为目标,并根据题目要求建立约束条件,利用lingo软件对问题进行求解便可得到两种配种方式下公母种猪数量和后备种猪数量以及小猪选为种猪的比例和母猪的存栏数等数据。
在第三问中,结合题目所给的三年内的生猪价格预测曲线,通过考虑肉猪的生长周期及母猪的配种、生产时间,为求得母猪及肉猪的存栏数量和最佳经营策略。通过查阅相关资料得到2002---2013年的猪肉价格和饲料价格,运用最小二乘法对猪肉价格与饲料价格的关系进行拟合,得到两者间的函数关系。结合第二问的结果进行分析,引入该时间是否生产和该时间是否卖出两个"0---1"变量,以总盈利最大为目标,并根据题目要求建立约束条件,建立优化模型,利用lingo软件求得在母猪数量不发生变化情况下的生产时间和出栏时间。在上一步模型的基础上,将结果转换为条件,以母猪数量作为未知量,添加相关约束条件,建立优化模型,利用lingo软件求得三年内的平均年利润、经营策略及母猪及肉猪存栏数曲线。
模型的建立与求解整体论文缩略图
全部论文请见下方" 只会建模 QQ名片" 点击QQ名片即可
程序代码:
bash
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;
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;
y*9=z+@floor(x*0.45)+1+y+@floor(y*0.3)+1;
bash
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):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)));
sets:
bb/1..109/:a,b,c,x,y,z;
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(bb(j):x(j)<=1110);
@for(bb(j):x(j)>=24);
@for(bb(j)|(j#le#108):@abs(x(j)-x(j+1))<=x(j)*0.01);
x(1)=1110;
@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));