在 Python 中使用 Gekko,对于多 objective 优化问题,是否所有 objective 函数都必须是同一单位?
Using Gekko in Python, for a multi-objective optimization problem, do all objective functions have to be of the same unit?
根据 Gekko 文档,对多个 objective 函数求和并求出一个总的 objective 值。这是否意味着所有 objective 函数都必须具有相同的量纲或单位(立方米或美元或千克)?
如果是这样,有没有办法让多个 objective 具有不同的单位?
另外,附带的问题是,是否可以轻松提取每个 objective 函数的最佳 objective 值(除了求解器给出的总体 objective 值)?
Gekko 将 objective 函数一起添加到单个 objective 语句中。 Gekko 不跟踪单位,因此 kg/hr
中的 Maximize(flow1)
和 gm/hr
中的 Maximize(flow2)
不会被 Gekko 缩放。这是一个简单的示例问题,显示了如何解决多 objective 函数语句:
from gekko import GEKKO
m = GEKKO(remote=False)
x = m.Var()
obj1 = m.Intermediate((x-3)**2)
obj2 = m.Intermediate((x-2)**2)
m.Minimize(obj1)
m.Minimize(obj2)
m.solve(disp=False)
print('Obj Total: ',m.options.OBJFCNVAL)
print('Obj1: ',obj1.value[0])
print('Obj2: ',obj2.value[0])
print('x: ',x.value[0])
解决方案是x=2.5
,符合预期:
Obj Total: 0.5
Obj1: 0.25
Obj2: 0.25
x: 2.5
两个 objective 相加形成整体 objective。
根据 Gekko 文档,对多个 objective 函数求和并求出一个总的 objective 值。这是否意味着所有 objective 函数都必须具有相同的量纲或单位(立方米或美元或千克)? 如果是这样,有没有办法让多个 objective 具有不同的单位? 另外,附带的问题是,是否可以轻松提取每个 objective 函数的最佳 objective 值(除了求解器给出的总体 objective 值)?
Gekko 将 objective 函数一起添加到单个 objective 语句中。 Gekko 不跟踪单位,因此 kg/hr
中的 Maximize(flow1)
和 gm/hr
中的 Maximize(flow2)
不会被 Gekko 缩放。这是一个简单的示例问题,显示了如何解决多 objective 函数语句:
from gekko import GEKKO
m = GEKKO(remote=False)
x = m.Var()
obj1 = m.Intermediate((x-3)**2)
obj2 = m.Intermediate((x-2)**2)
m.Minimize(obj1)
m.Minimize(obj2)
m.solve(disp=False)
print('Obj Total: ',m.options.OBJFCNVAL)
print('Obj1: ',obj1.value[0])
print('Obj2: ',obj2.value[0])
print('x: ',x.value[0])
解决方案是x=2.5
,符合预期:
Obj Total: 0.5
Obj1: 0.25
Obj2: 0.25
x: 2.5
两个 objective 相加形成整体 objective。