gpt4 book ai didi

python-3.x - 优化多元逻辑函数的正确目标函数

转载 作者:行者123 更新时间:2023-12-04 03:45:43 26 4
gpt4 key购买 nike

我有以下时间序列数据集:

输入 1、输入 2、输入 3、输出

在下面的图中,您可以看到每个输入分别根据输出绘制。

Input1/Output

Input2/Output

Input3/Output

对于每个输入列,我使用 Scipy Optimize - curve_fit 函数用以下表达式拟合数据:

def sigmoid(x, a, b, L):
y = L / (1 + np.exp(-b*(x-a)))
return y

对于每个输入列,我有以下常量(a、b、L):

输入1/输出:[2.86115648e+04 4.52333694e-05 6.49423842e-01]

输入2/输出:[6.15077795e+03 2.00771121e-04 6.02374706e-01]

输入 3/输出:[3.90539815e+03, 7.80392947e-04, 5.77858431e-01]

给定一个(任意/示例)约束:输入 1 + 输入 2 + 输入 3 < 120,000

我想最大化每个输入以获得最大输出。

我能否将目标函数简单地表达为每个单独函数的总和?换句话说,我的目标函数是否可以表示如下:

z = (L1/(1 + np.exp(-b1*(x1-a1)))) + (L2/(1 + np.exp(-b2*(x2-a2)))) +( L3/(1 + np.exp(-b3*(x3-a3)))) + (L4/(1 + np.exp(-b4*(x4-a4))))

引用 Gekko 代码:

# Equations
m.Equation(x1+x2+x3+x4<=120000)
m.Obj(L1 / (1 + np.exp(-b1*(x1-a1)))) + (L2 / (1 + np.exp(-b2*(x2-a2)))) + (L3 / (1 + np.exp(-b3*(x3-a3)))) + (L4 / (1 + np.exp(-b4*(x4-a4)))) # Objective
m.solve(disp=False) # Solve

使用下面的代码我看到了以下错误:

 m.options.SOLVER=1  # APOPT is an MINLP solver

# optional solver settings with APOPT

a1 = 1662.2548899281423
b1 = 0.0008133406683575547
L1 = 0.5456713295037908

a2 = 5273.826922188703
b2 = 0.00024498561094814383
L2 = 0.5730871268164875

a3 = 3836.9976232989725
b3 = 0.0007892890342618781
L3 = 0.5697505125863976

a4 = 27077.484569050346
b5 = 0.00004580885182095956
L6 = 0.6429567105559689

# Initialize variables
x1 = m.Var(value=1.00,lb=1.00)
x2 = m.Var(value=5.00,lb=1.00)
x3 = m.Var(value=5.00,lb=1.00)
x4 = m.Var(value=5.00,lb=1.00)

# Equations
m.Equation(x1+x2+x3+x4<=120000)
m.Maximize( (L1 / (1.00 + np.exp(-b1*(x1-a1)))) + (L2 / (1.00 + np.exp(-b2*(x2-a2)))) + (L3 / (1.00 + np.exp(-b3*(x3-a3)))) + (L4 / (1.00 + np.exp(-b4*(x4-a4))))) # Objective
m.solve(disp=False) # Solve

print('Results')
print('x1: ' + str(x1.value))
print('x2: ' + str(x2.value))
print('x3: ' + str(x3.value))
print('x4: ' + str(x4.value))
print('Objective: ' + str(m.options.objfcnval))

错误:

---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/usr/local/lib/python3.7/site-packages/gekko/gk_operators.py in __getattr__(self, name)
35 else:
---> 36 raise AttributeError(name)
37 #%%Operator overloading for building functions

AttributeError: exp

The above exception was the direct cause of the following exception:

TypeError Traceback (most recent call last)
<ipython-input-136-404bfd33128d> in <module>
31 m.Equation(x1+x2+x3+x4<=1000000)
32
---> 33 m.Maximize( (L1 / (1.00 + np.exp(-b1*(x1-a1)))) + (L2 / (1.00 + np.exp(-b2*(x2-a2)))) + (L3 / (1.00 + np.exp(-b3*(x3-a3)))) + (L4 / (1.00 + np.exp(-b4*(x4-a4))))) # Objective
34 m.solve(disp=False) # Solve
35 print('Results')

TypeError: loop of ufunc does not support argument 0 of type GK_Operators which has no callable exp method

不是使用 Numpy 指数函数,而是使用 Gekko exp 函数按以下方式解决问题:

from gekko import GEKKO
m = GEKKO() # Initialize gekko
m.options.SOLVER=1 # APOPT is an MINLP solver

# optional solver settings with APOPT

a1 = 1662.2548899281423
b1 = 0.0008133406683575547
L1 = 0.5456713295037908

a2 = 5273.826922188703
b2 = 0.00024498561094814383
L2 = 0.5730871268164875

a3 = 3836.9976232989725
b3 = 0.0007892890342618781
L3 = 0.5697505125863976

a4 = 27077.484569050346
b5 = 0.00004580885182095956
L6 = 0.6429567105559689

# Initialize variables
x1 = m.Var(value=1.00,lb=1.00)
x2 = m.Var(value=5.00,lb=1.00)
x3 = m.Var(value=5.00,lb=1.00)
x4 = m.Var(value=5.00,lb=1.00)

# Equations
m.Equation(x1+x2+x3+x4>=1000)
m.Maximize( (L1 / (1.00 + m.exp(-b1*(x1.value-a1)))) + (L2 / (1.00 + m.exp(-b2*(x2.value-a2)))) + (L3 / (1.00 + m.exp(-b3*(x3.value-a3)))) + (L4 / (1.00 + m.exp(-b4*(x4.value-a4))))) # Objective
m.solve(disp=False) # Solve

print('Results')
print('x1: ' + str(x1.value))
print('x2: ' + str(x2.value))
print('x3: ' + str(x3.value))
print('x4: ' + str(x4.value))
print('Objective: ' + str(m.options.objfcnval))

最佳答案

是的,您可以按照您提供的那样编写目标函数。这是指用于多目标优化的“加权和”方法。
一件事,如果你想“最大化”你的目标函数,你可能想在整个目标函数等式上加上一个负号。

m.Obj(-(L1 / (1 + np.exp(-b1*(x1-a1)))) + (L2 / (1 + np.exp(-b2*(x2-a2)))) +(L3 / (1 + np.exp(-b3*(x3-a3))))) # Objective

或者,您可以改用 Gekko 内置函数“最大化”。

m.maximize(L1 / (1 + np.exp(-b1*(x1-a1)))) + (L2 / (1 + np.exp(-b2*(x2-a2)))) +(L3 / (1 + np.exp(-b3*(x3-a3)))) # Objective

关于python-3.x - 优化多元逻辑函数的正确目标函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65181332/

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