繁体   English   中英

R中的优化:最大化和最小化许多变量

[英]Optimization in R: Maximizing and Minimizing Many Variables

我有一个包含70种食物的数据集,以及每种食物的营养价值(蛋白质/盎司,脂肪/盎司,cals / oz等),以及食物的成本/盎司。 我想弄清楚 - 给定一个预算在$ - 什么是最好的食物组合(和每种食物的amt。)将最大化蛋白质,减少脂肪,减少卡路里等。我的目标是这样做跨越一系列价格点,并绘制每一个。

我发现了一大堆不同的软件包可以帮助解决这个问题: http//cran.r-project.org/web/views/Optimization.html 但是,我是一个初学者,并不确定什么是最有用的/从哪里开始 - 会喜欢熟悉解决这些优化问题的人的一些建议。

这被称为饮食问题,它是线性编程的流行介绍(参见,例如, 我发现的饮食问题的第一个谷歌打击 )。 通过诸如lpSolve包的线性编程求解器可用于解决饮食问题的许多变体。

例如,考虑上面链接中的问题版本,您可以从中选择以下食物:

(food <- data.frame(Food=c("Corn", "2% Milk", "Wheat Bread"), CostPerServing=c(.18, .23, .05), VitaminA=c(107, 500, 0), Calories=c(72, 121, 65)))
#          Food CostPerServing VitaminA Calories
# 1        Corn           0.18      107       72
# 2     2% Milk           0.23      500      121
# 3 Wheat Bread           0.05        0       65

假设你想要找到每种食物的份数最小化总成本,但总卡路里必须在2000到2500之间,维生素A的量必须在5000到50000之间。如果定义了变量X1 ,X2和X2,那么你的目标是.18 * X1 + .23 * X2 + .05 * X3,变量的线性函数。 类似地,每个约束在变量的线性函数中; 例如,卡路里数的下限是形式72 * X1 + 121 * X2 + 65 * X3> = 2000的约束。

来自lpSolve包的lp函数将指示目标值中的系数的向量和关于约束的信息(约束矩阵,每个约束的方向和每个约束的右侧)作为输入。 对于所述问题,这将是:

library(lpSolve)
mod <- lp("min",  # min/max
          food$CostPerServing,  # Objective
          rbind(food$VitaminA, food$VitaminA, food$Calories, food$Calories),  # Constraint matrix
          c(">=", "<=", ">=", "<="),  # Constraint directions
          c(5000, 50000, 2000, 2500))

模型解决后,您可以查看目标函数和值:

mod$objval
# [1] 2.907692
mod$solution
# [1]  0.00000 10.00000 12.15385
sum(food$VitaminA * mod$solution)
# [1] 5000
sum(food$Calories * mod$solution)
# [1] 2000

满足限制条件的最便宜的成本是2.91美元,你可以通过使用0份玉米,10份2%牛奶和12.15份小麦面包来达到这个目的。 这产生了5000单位的维生素A和2000卡路里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM