Такая задача относится к классу целочисленного нелинейного программирования.
Из готовых пакетов есть вот это:
https://www.coin-or.org/Couenne/Сие есть
Цитата:
Couenne (Convex Over and Under ENvelopes for Nonlinear Estimation), an Open Source branch&bound algorithm for solving Mixed-Integer Nonlinear Programming (MINLP) problems
Решатель - хитросделанный и содержит большое количество сопряженных друг с другом методов для быстрого поиска допустимых решений и отсечения при переборе. Ищет одно (оптимальное) решение. Если нужно больше, то можно заново решать вашу задачу с добавлением условий, исключающих уже найденные решения (это в условиях целочисленных решений нетрудно сформулировать).
На задачах с небольшим количеством переменных работает нормально. Если пространство поиска невелико, то, как уже отмечалось выше - проще всего использовать перебор.
Какое-то время назад проблема с использованием была в том, что на вход эта штука принимала
AMPL-формат. Но, как показал беглый поиск, появились какие-то пакеты для python. Если заинтересуетесь и получится использовать библиотеку с python - отпишитесь плз.