gpt4 book ai didi

r - R中的非线性离散优化

转载 作者:行者123 更新时间:2023-12-03 16:38:11 27 4
gpt4 key购买 nike

我有一个简单的(确实是经济学标准)非线性约束离散最大化问题要在 R 中解决,但遇到了麻烦。我找到了部分问题的解决方案(非线性最大化;离散最大化),但没有找到所有问题的联合。

这是问题所在。消费者想要购买三种产品(香蕉、香蕉、 cookies ),知道价格并且预算为 20 欧元。他喜欢多样化(即,如果可能的话,他希望拥有所有三种产品)并且他的满意度随着消费量的减少而下降(他喜欢他的第一个 cookies 的方式超过了他的第 100 个)。

他希望最大化的函数是

function to maximize

当然,因为每个人都有一个价格,而且他的预算有限,他在约束下最大化这个函数

enter image description here

我想要做的是找到满足约束的最优购买 list (N个 ananas、M个香蕉、K个 cookies )。

如果问题是线性的,我会简单地使用 linprog::solveLP()。但目标函数是非线性的。
如果问题具有连续性,那么将有一个简单的解析解。

问题是离散和非线性的,我不知道如何进行。

这是一些可以玩的玩具数据。

df <- data.frame(rbind(c("ananas",2.17),c("banana",0.75),c("cookie",1.34)))
names(df) <- c("product","price")

我想要一个优化例程,为我提供 (N,M,K) 的最佳购买 list 。

任何提示?

最佳答案

如果您不介意使用“手动”解决方案:

uf=function(x)prod(x)^.5
bf=function(x,pr){
if(!is.null(dim(x)))apply(x,1,bf,pr) else x%*%pr
}
budget=20
df <- data.frame(product=c("ananas","banana","cookie"),
price=c(2.17,0.75,1.34),stringsAsFactors = F)
an=0:(budget/df$price[1]) #include 0 for all possibilities
bn=0:(budget/df$price[2])
co=0:(budget/df$price[3])
X=expand.grid(an,bn,co)
colnames(X)=df$product
EX=apply(X,1,bf,pr=df$price)
psX=X[which(EX<=budget),] #1st restrict
psX=psX[apply(psX,1,function(z)sum(z==0))==0,] #2nd restrict
Ux=apply(psX,1,uf)
cbind(psX,Ux)
(sol=psX[which.max(Ux),])
uf(sol) # utility
bf(sol,df$price) #budget

> (sol=psX[which.max(Ux),])
ananas banana cookie
1444 3 9 5
> uf(sol) # utility
[1] 11.61895
> bf(sol,df$price) #budget
1444
19.96

关于r - R中的非线性离散优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33122473/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com