大家好,欢迎来到IT知识分享网。
1. 问题重述
某学校为学生提供营养套餐,希望以最小费用来满足学生对基本营养的需求,按照营养学家的建议,一个人一天对蛋白质、维生素 A 和钙的需求如下:
50g 蛋白质 4000IU(国际单位)维生素 A 和 1000mg 钙。我们只考虑以下食物构成的食谱:苹果、香蕉、胡萝卜、枣汁和鸡蛋,其营养含量见下表。确定每种食物的用量,以最小费用满足营养学家建议的营养需求,并考虑:
(1)对维生素 A 的需求增加一个单位时,是否需要改变食谱?成本增加多少?如果
对蛋白质的需求增加 1g 呢?如果对钙的需求增加 1mg 呢?
(2)胡萝卜的价格增加 1 角时,是否需要改变食谱?成本增加多少?
2.模型假设
1.不考虑学生的口味偏好问题,只考虑价格最低,即某些原料可以取零。
2.为了便于计算,不考虑原材料的浪费问题,即吃什么买什么。
3.不考虑其他因素对食材营养成分的改变,仅考虑食材给定的分布情况。
3.符号说明
4.问题分析
均衡膳食还包括各种维生素和矿物质的摄取量。只有营养结构合理,身体才能健康。要进行营养配餐,首先要了解各种食物的营养成分及其含量,然后根据人体对热能、蛋白质、矿物质、维生素的需要,选择搭配食物,进行合理烹调。
对本题而言,可以处理为一个优化问题,这个优化问题的目标是使每天的每个人的食材消耗最少,同时又满足营养指标,要做的决策是搭配计划,即每人每日的食材种类和数量。决策受到四个(若为整数,则为五个)条件的约束:蛋白质下
限,钙含量下限,维他命下限,同时食材的数量默认为非负。
综上,此题即为整数规划问题(若可以取小数则为一般线性规划问题)。
5.模型建立与解决
基本模型
决策变量:
目标函数:假设第𝑖种食材的数量为𝑥(𝑖),则总的价格最小可以表示为:
约束条件:
蛋白质:根据实际要求,每日的蛋白质含量不得低于 50g:
维他命:根据实际要求,每日的维他命含量不得低于 4000:
钙含量:根据实际要求,每日的钙含量不得低于 1000mg:
非负约束:同时要求第𝑖种食材的数量𝑥(𝑖)数量大于等于零:
综上,将各方程联立即可得到该模型的数学表达:
模型分析:
·比例性:每个决策变量对目标函数的“贡献”,与该决策变量的取值成正比;每个决策变量对每个约束条件右端项的“贡献”,与该决策变量的取值成正比.
·可加性:各个决策变量对目标函数的“贡献”,与其他决策变量的取值无关;各个决策变量对每个约束条件右端项的“贡献”,与其他决策变量的取值无关.
·连续性:每个决策变量的取值是连续的.比例性和可加性保证了目标函数和约束条件对于决策变量的线性性,连续性则允许得到决策变量的实数最优解,通过软件求解可得,该模型可以求得全局最优解
求解结果:Global optimal solution found.
Objective value: 269.3603
Infeasibilities: 0.000000
Total solver iterations: 2
即全局最优为26.936元:
Variable Value Reduced Cost
NUM( 1) 0.000000 7.498990
NUM( 2) 0.000000 12.71380
NUM( 3) 49.38272 0.000000
NUM( 4) 0.000000 44.34007
NUM( 5) 2.805836 0.000000
只需49.4g的胡萝卜和2.8个鸡蛋就可以达到要求。
通过Lingo运行时,得到的结果矩阵图分析如下:
6.模型评价
本文就如何搭配不同食材,来使得搭配方案满足营养的要求,同时要求花费的费用最低,当然,方案尚且存在一些不合理之处。
不合理性:只考虑了利益最大化,没有考虑实际情况人们对食材的要求不同。
考虑不全:在实际情况中,鸡蛋的单位为个,所以要求必须为整数。
全局最优:多方面考虑,可以判断该线性规划存在全局最优并用软件求出。
Lingo:
model:
sets:
row/1..5/:num,price,vita,ca,protein,weight;
endsets
data:
price=10,15,5,60,8;
ca=9.6,7,19,57,22;
vita=73,96,20253,890,279;
protein=0.3,1.2,0.7,3.5,5.5;
weight=138,118,72,178,44;
enddata
!@for(row(i):@gin(num(i)));!是否需要考虑为整数规划;
@for(row(i):num(i)>=0);!每一项都必须大于等于零;
@sum(row(i):num(i)*protein(i))>=50;!蛋白质的约束条件;
@sum(row(i):num(i)*vita(i))>=4000;!维生素的约束条件;
@sum(row(i):num(i)*ca(i))>=1000;!钙的约束条件;
min=@sum(row(i):num(i)*price(i));!总价格最小;
sumw=@sum(row(i):num(i)*weight(i));!顺便计算一下总的重量;
end
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/22421.html