1

基本的な 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);

これにより、元の ($objectiveFunction) に完全に一致するように見える配列が作成されます。ただし、ループから作成された配列を使用して LP モデルを実行すると、lp_solve は、配列を入力した同じ行で「無効なベクトル」のエラーを返します。ある配列が機能し、別の配列が機能しない理由がわかりません。

4

1 に答える 1

0

lpsolve は浮動小数点数の配列を期待しているようです。

変化:

array_push($newObjective, $sqlResults[$i][0]);

に:

array_push($newObjective, (float) $sqlResults[$i][0]);

問題を修正するようです

于 2015-05-28T17:10:59.783 に答える