我需要实现类似的功能,比如在Excel中使用GRG算法和一些约束实现解算器。 我有下表:
|利润|效用|
| 10 | 0,25 |
| 20 | 0,5 |
我有三个变量:x1,x2,x3
因为没有支持GRG的库(至少不是免费的),所以我尝试使用SLSQP算法。 因此,我尝试最小化以下函数(对于此表):
(x1*math.exp(-10/x2) + x3) - 0.25)**2 + (x1*math.exp(-20/x2) + x3) - 0.5)**2
而且x1必须是正的,x2必须是负的,所以我使用了边界而不是约束(我不知道它是否正确)
因此,我有以下脚本:
import numpy as np
from scipy.optimize import minimize
import math
def objective_fcn(x):
x1 = x[0]
x2 = x[1]
x3 = x[2]
return ((x1*math.exp(-10/x2) + x3) - 0.25)**2 + ((x1*math.exp(-20/x2) + x3) - 0.5)**2
bounds_x1 = [None, 0]
bounds_x2 = [0, None]
bounds_x3 = [None, None]
bounds = [bounds_x1, bounds_x2, bounds_x3]
x0 = [-1, 1, 1]
result = minimize(objective_fcn, x0, method="SLSQP", bounds=bounds)
print(result)
问题是带有GRG的Excel返回完全不同的x1、x2、x3和偶数函数值。在Excel中,我也将初始值设置为(1,-1,1)。所以我可能在Scipy中选择了错误的算法,或者我的代码一定是错误的。 如果此alghoritm不适用于此任务,您会推荐不同的吗
Python脚本结果
x:数组([x1=-1.00001703,x2=1.00017025,x3=0.37502273])
乐趣:0.031238632038406017
Excel结果
x1=-237644086849453x2=47066297954663x3=0533921109144656
乐趣:186E-14
实用程序f中的Excel函数:=$O$6*EXP(-E6/$P$6)+$Q$6
SSE函数:=SUMSQ(H6:H7)
多谢各位
目前没有回答
相关问题 更多 >
编程相关推荐