Я mystic
автор ... да. Mysti c может обрабатывать невыпуклые задачи с помощью решателя дифференциальной эволюции или одного из решателей ансамбля. Решателя MLP-специфицированного c не существует, но вместо этого он обрабатывает целочисленное программирование как пространственную карту, которая ограничивает пространство решения - либо передайте решателю np.round
в качестве ограничения, либо используйте декоратор integers
для ограничения.
Например, см .:
Обновлено с учетом комментариев ниже Для предоставления другого примера ограничений ... если вы хотите наложить сумму на квадрат входов, вы можете сделать это следующим образом:
>>> import mystic as my
>>> squared = lambda x: [i*i for i in x]
>>> c = lambda x: my.constraints.impose_sum(24, squared(x))
>>> c([1.,2.,3.,4.])
[0.8, 3.2, 7.199999999999999, 12.8]
>>> sum(_)
24.0
mystic
имеет несколько модулей, в которых вы можете найти готовые функции ограничений, но Лучшие места для начала: mystic.constraints
и mystic.tools
для общих ограничений, mystic.math.measures
для статистических ограничений, mystic.symbolic
для символов c ограничений и mystic.penalty
для мягких ограничений (то есть штрафов).