我试图找出这个目标函数的最大值:
f(x1,x2,x3) = 1300x1 + 600x2 + 500x3
受下列限制的限制
300x1 + 150x2 + 100x3 <= 4,000
90x1 + 30x2 + 40x3 <= 1,000
x1 <= 5
x1,x2,x3 >= 0
下面是我正在使用的代码,它没有返回我正在寻找的值。变量的输出为9.453022e-123.272252e-125.548419e-14,总价值为-1.428002e-08。
我刚认识R.我做错什么了?谢谢。
f=function(x) -(1300*x[1]+600*x[2]+500*x[3]) # minimize -f(x,y,z)
inequalities=function(x){ #define the ineqaulities function
h=0
h[1]=-(300*x[1]+150*x[2]+100*x[3]-4000)
h[2]=-(90*x[1]+30*x[2]+40*x[3]-1000)
h[3]=-(1*x[1]+0*x[2]+0*x[3]-5)
return(h)}
g=function(x){ #x,y,z > 0
h=0
h[1]=x[1]
h[2]=x[2]
h[3]=x[3]
return(h)}
p0=c(0,0,0) #give the starting point
y=constrOptim.nl(p0,f,hin=inequalities,heq=g);
print(y$par)
print(y$value)发布于 2020-11-25 00:51:44
文件上说:
heq: a vector function specifying equality constraints such that heq[j] = 0 for all j因此,您要指定的下界x[1],x[2],x[3] >= 0实际上被解释为x[1],x[2],x[3] = 0。因此,溶液为: 9.453022e-12,3.272252e-125.548419e-14。您的下界需要合并到hin中。
请注意,对于线性问题有更好的线性求解者。将线性问题传递给非线性求解者不是最优的.
https://stackoverflow.com/questions/64994582
复制相似问题