Я решаю линейную модель бинарной оптимизации с использованием CPLEX. Я закодировал модель как в MATLAB, так и в JAVA. Оптимальное значение целевой функции, получаемой как от программирования JAVA, так и от MATLAB, одинаково. Однако значения оптимальной переменной различны. Возможно иметь несколько оптимальных решений для моей модели. Мне было интересно, возможно ли иметь разные оптимальные значения для переменных, возникающих в результате применения CPLEX в MATLAB и JAVA?
Да, конечно. Под капотом эти языки действуют совершенно иначе, а не только байтовый код и скомпилированный разброс кода. Вы можете написать код в коде C и запустить его через разные компиляторы, и результаты выполнения кода будут разными. Если какая-либо математика с плавающей запятой выполнена, компилятор выполняет различные оптимизации для ускорения кода. В идеале один компилятор всегда будет выполнять математику с плавающей запятой в том же порядке после оптимизации (поэтому, даже если код немного отличается с тем же ожидаемым выходом, это будет одинаково), это предположение не может быть проведено на нескольких компиляторах/языках/hardware, поскольку числа с плавающей запятой невероятно разборчивы.
Я не читал весь этот документ, но он может вас заинтересовать: http://gafferongames.com/networking-for-game-programmers/floating-point-determinism/