А просто перебрать все возможные комбинации конечного числа значений и проверить их подстановкой - не вариант?
это единственное что мне пока пришло в голову, но тут есть сложности:
1 - значения внутри классов в общем случае неизвестны, нужно задаваться начальными приближениями, но для выбранных начальных приближений распределение переменных по классам может отличаться от истинного
2- число вариантов очень велико, так для 100 переменных (а это минимум) число вариантов

, из за этого сплошной перебор на практике неосуществим
у меня есть идея использовать градиентный алгоритм в котором после каждого уточнения выполняется кластеризация переменных на заданное число классов

(равное или меньше числа уравнений), затем все переменные заменяются наиболее вероятным значением в соответствующем кластере
таким образом точно в направлении градиента корректируются значения только

переменных, а остальные только "тянутся за ними"
но бутет ли сходится этот алгоритм к верному решению? и существует ли вообще единственное решение задачи в такой постановке?