Scipy.optimize minimize不会给出与Excel相同的结果

2024-05-16 04:12:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要实现类似的功能,比如在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

Excel

实用程序f中的Excel函数:=$O$6*EXP(-E6/$P$6)+$Q$6 SSE函数:=SUMSQ(H6:H7)

还有Excel解算器:Solver

多谢各位


Tags: 函数import脚本算法nonemathexcelgrg