我刚刚开始学习优化,在寻找以下问题的最佳值时遇到一些问题。注意:这只是我想到的一个随机问题,没有实际应用。
问题:
其中x可以是列表 ([2,4,6]) 中的任何值,并且y介于 1 和 3 之间。
我的尝试:
from gekko import GEKKO
import numpy as np
import math
def prob(x,y,sel):
z = np.sum(np.array(x)*np.array(sel))
cst = 0
i=0
while i <= y.VALUE:
fact = 1
for num in range(2, i + 1): # find the factorial value
fact *= num
cst += (z**i)/fact
i+=1
return cst
m = GEKKO(remote=False)
sel = [2,4,6] # list of possible x values
x = m.Array(m.Var, 3, **{'value':1,'lb':0,'ub':1, 'integer': True}) …Run Code Online (Sandbox Code Playgroud) 我刚刚完成了阅读器和记录器的教程。我想知道是否有一种方法可以计算每个学科被调用的次数。下面我在 Sellar 问题中使用全局变量来计算这个。更好的方法是什么?另外,如果问题没有解决者,建议的方式会改变吗?
import numpy as np
import time
import openmdao.api as om
tic = time.perf_counter()
dc1 = 0
dc2 = 0
class SellarDis1(om.ExplicitComponent):
def setup(self):
self.add_input('z', val=np.zeros(2))
self.add_input('x', val=0.)
self.add_input('y2', val=1.0)
self.add_output('y1', val=1.0)
self.declare_partials('*', '*', method='fd')
def compute(self, inputs, outputs):
global dc1
dc1+=1
z1 = inputs['z'][0]
z2 = inputs['z'][1]
x1 = inputs['x']
y2 = inputs['y2']
outputs['y1'] = z1**2 + z2 + x1 - 0.2*y2
class SellarDis2(om.ExplicitComponent):
def setup(self):
self.add_input('z', val=np.zeros(2))
self.add_input('y1', val=1.0)
self.add_output('y2', val=1.0)
self.declare_partials('*', '*',method='fd')
def compute(self, inputs, …Run Code Online (Sandbox Code Playgroud)