В моей проблеме минимизации мне нужно свести к минимуму член, факторы которого могут быть очень большими (например, 2^200 для некоторых случаев). Например, мне нужно добавить объективные термины, какCplex Java API: очень большие числа (> 64 бит) или точные числа с плавающей запятой
objective.addTerm(vars.get(i).get(j), math.pow(2,200); // vars is a list of lists of IloNumVar, objective is of type IloLinearNumExpr
// ... Add terms for all cvars ...
cplex.addMinimize(objective);
Есть ли способ, чтобы добавить такие большие объективные условия для CPLEX? Я запускаю cplex 12.3, и API предлагает мне передавать переменные типа double. Кажется, что нет поддержки BigIntegers?
Другим решением было бы уменьшить все значения до диапазона [0,2^32]. Однако результаты не являются оптимальными из-за ошибок округления. Является ли cplex поддержкой BigDecimals или некоторых эквивалентных типов?
Я думаю, что вам просто нужно его масштабировать. Если у вас есть проблема значительного размера (количество варов и ограничений), вы, как правило, только докажете оптимальность с точностью до определенного допуска. Ошибки округления на ваших больших количествах, вероятно, не будут значительными по сравнению с допуском оптимальности. Допуск по оптимальности по умолчанию - это что-то вроде 1e-5, и я столкнулся с некоторыми проблемами; но обычно мы склонны расслабляться и принимать более высокую толерантность, чтобы получить разумное время работы. – TimChippingtonDerrick