我是优化新手,我需要在一个简单的场景中实现它:
有一家汽车制造商可以生产 5 种型号的汽车/货车。与可以生产的每种型号相关的是所需的工时数和所需的钢材吨数,以及从销售一辆此类汽车/货车中获得的利润。制造商目前拥有固定数量的钢材和劳动力,应该以优化总利润的方式使用。
这是我挂断的部分-每辆车也有最低订购量。公司必须在生产/销售该型号在经济上可行之前制造一定数量的每种型号。如果不是最终条件,这将很容易发送到optim()
,因为可以为 `lower = ...' 参数提供一个具有最小订购数量的向量,但它不会将 0 视为选项。有人可以帮我解决这个问题,考虑到最小订单,但仍然允许订单为 0?以下是我组织相关信息/限制的方式:
Dorian <- data.frame(Model = c('SmCar', 'MdCar', 'LgCar', 'MdVan', 'LgVan'),
SteelReq = c(1.5,3,5,6,8), LabReq=c(30,25,40,45,55),
MinProd = c(1000,1000,1000,200,200),
Profit = c(2000,2500,3000,5500,7000))
Materials <- data.frame(Steel=6500,Labor=65000)
NetProfit<-function(x) {
x[1]->SmCar
x[2]->MdCar
x[3]->LgCar
x[4]->MdVan
x[5]->LgVan
np<-sum(Dorian$Profit*c(SmCar,MdCar,LgCar,MdVan,LgVan))
np
}
LowerVec <- Dorian$MinProd #Or 0, how would I add this option?
UpperVec <- apply(rbind(Materials$Labor/Dorian$LabReq,
Materials$Steel/Dorian$SteelReq),2,min)
# Attempt at using optim()
optim(c(0,0,0,0,0),NetProfit,lower=LowerVec, upper=UpperVec)
最终,我想用已知分布的随机变量替换参数,例如 Profit 和 LabReq(需要人工),并将其包装到一个函数中,该函数将 Steel 和 Labor 作为输入以及随机变量的参数。我将要进行多次模拟,然后在给定利润和所需劳动力的特定参数的情况下找到平均解决方案,因此理想情况下,这种优化也会很快,以便我可以执行模拟。提前感谢您的帮助!