Я создал базовую модель LP, ввел объектную функцию в массив вручную, и модель работала нормально:
$ret = lpsolve('set_obj_fn', $lp, array(1, 3, 7, 2));
Я переместил массив и ссылался на него с переменной в функции lp_solve, и все еще все в порядке:
$objectiveFunction = array(1, 3, 7, 2);
$ret = lpsolve('set_obj_fn', $lp, $objectiveFunction);
Теперь я хочу расширить модель, вытащив значения для моей целевой функции из базы данных MySQL. Я запросил базу данных для результатов и, используя цикл, переместил эти значения в массив.
$newObjective = array();
for($i=0; $i&l t;count($sqlResults); $i++) {
array_push($newObjective, $sqlResults[$i][0]);
}
$ret = lpsolve('set_obj_fn', $lp, $newObjective);
Это создает массив, который отлично соответствует моей оригинальной ($ objectFunction). Однако, когда я запускаю модель LP с использованием массива, созданного из цикла, lp_solve возвращает ошибку для "недопустимого вектора" в той же строке, где я ввожу свой массив. Я не могу понять, почему один массив работал, а другой - нет.
Похоже, lpsolve ожидает массив чисел с плавающей запятой.
Изменение:
array_push($newObjective, $sqlResults[$i][0]);
Для того, чтобы:
array_push($newObjective, (float) $sqlResults[$i][0]);
похоже, устраняет проблему