@error:方程定义:没有等式 (=) 或不等式 (>,<) : true

问题描述 投票:0回答:1

我正在通过为有限元模型选择最佳横截面(连续变量)和材料(整数变量)来构建结构优化项目。以下是我的 run_simulation :

from gekko import GEKKO
optimizer  = GEKKO(remote = False) # Create a GEKKO object
num_vars = len(initial_opt_vars) // 2 

# Continous vars 
x_continuous = [optimizer.Var(value=0.005, lb=0) for _ in range(num_vars)]
        
# Integer Vars
x_integer = [optimizer.sos1([0, 1, 2]) for _ in range(num_vars)]  # SOS1 for selecting among discrete options
        
optimizer.Minimize(self.objective_function(x_continuous, x_integer))
        
stress_expr = self.stress_constraint(x_continuous, x_integer)
        
optimizer.Equation([expr >= 0 for expr in stress_expr])

optimizer.options.SOLVER = 1
optimizer.solve(disp = True)

在约束函数和目标函数内,我使用优化的当前值来求解有限元模型。约束的输出是一个包含 542 个元素的 numpy 数组。我不知道为什么不等式表达式是错误的,我也不知道如何从那里开始。

错误:

error: Equation Definition
 Equation without an equality (=) or inequality (>,<)
 true
 STOPPING...

有人可以帮助我吗?

有限元分析模型的结构优化。

我的

gk_model0.apm
具有以下结构:

Model
Variables
    v1 = 0.005, >= 0
    v2 = 0.005, >= 0

-
    v270 = 0.005, >= 0
    v271 = 0.005, >= 0
    int_v272 = 0.01, <= 1, >= 0
    int_v273 = 0.01, <= 1, >= 0
-
    int_v1352 = 0.01, <= 1, >= 0
    int_v1353 = 0.01, <= 1, >= 0
    int_v1354 = 0.01, <= 1, >= 0
    v1355 = 0
End Variables
Intermediates
    i0=(((0+((0)*(int_v272)))+((1)*(int_v273)))+((2)*(int_v274)))
    i1=(((0+((0)*(int_v276)))+((1)*(int_v277)))+((2)*(int_v278)))
-
    i269=(((0+((0)*(int_v1348)))+((1)*(int_v1349)))+((2)*(int_v1350)))
    i270=(((0+((0)*(int_v1352)))+((1)*(int_v1353)))+((2)*(int_v1354)))
End Intermediates
Equations
    (((0+int_v272)+int_v273)+int_v274)=1
    v275=i0
    (((0+int_v276)+int_v277)+int_v278)=1
-
    v1351=i269
    (((0+int_v1352)+int_v1353)+int_v1354)=1
    v1355=i270
    True
    True
-
    True
    minimize 776.8284358905587
End Equations

End Model
python optimization gekko
1个回答
0
投票

函数

self.objective_function(x_continuous, x_integer)
self.stress_constraint(x_continuous, x_integer)
是对外部代码的调用。 Gekko 变量被传递到函数中,但 Gekko 无法从该函数中提取基于梯度的解决方案所需的信息。处理黑盒模型的一种策略是根据函数输入的数量创建代理函数。

  • 对于一维函数,使用 三次样条
  • 对于 2d 函数,使用 bspline
  • 对于更高维的函数,请使用 gekko 中的机器学习 进行回归并导入代理模型,例如神经网络、高斯过程回归、支持向量回归器或其他模型。

除了基于梯度的优化之外,另一种方法是使用无梯度方法,例如模拟退火、遗传算法(参见第 6 章)或工程优化课程中描述的其他方法。

© www.soinside.com 2019 - 2024. All rights reserved.