У меня есть проблема оптимизации с ограничениями, но решатель COBYLA, похоже, не соблюдает ограничения, которые я указываю.Scipy.optimize нарушение ограничения COBYLA
Моя задача оптимизации:
cons = ({'type':'ineq', 'fun':lambda t: t},) # all variables must be positive
minimize(lambda t: -stateEst(dict(zip(self.edgeEvents.keys(),t)), (0.1,)*len(self.edgeEvents), constraints=cons, method='COBYLA')
и stateEst
определяются как:
def stateEst(t):
val = 0
for edge,nextState in self.edgeEvents.iteritems():
val += edge_probability(self,edge,ts) * estimates[nextState]
val += node_probability(self, edge.head, ts, edge_list=[edge])* cost
for node,nextState in self.nodeEvents.iteritems():
val += node_probability(self, node, ts) * \
(estimates[nextState] + cost*len([e for e in node.incoming if e in self.compEdges])
return val
функция вероятности определена только для положительных значений t
. Словарь необходим, потому что вероятности вычисляются относительно «названных» t-значений.
Когда я запустил это, я заметил, что COBYLA пытается получить значение -0,025 для одного из значений t. Почему оптимизация не учитывает ограничения?