質問

言います。必点からB点-B点と終点ポイントD.必要なものである五日間に少なくとも金額が可能です。が可能な荷主のための各脚がそれぞれ異なる時間とコストのための各脚:

Array
(
    [leg0] => Array
        (
            [UPS] => Array
                (
                    [days] => 1
                    [cost] => 5000
                )

            [FedEx] => Array
                (
                    [days] => 2
                    [cost] => 3000
                )

            [Conway] => Array
                (
                    [days] => 5
                    [cost] => 1000
                )

        )

    [leg1] => Array
        (
            [UPS] => Array
                (
                    [days] => 1
                    [cost] => 3000
                )

            [FedEx] => Array
                (
                    [days] => 2
                    [cost] => 3000
                )

            [Conway] => Array
                (
                    [days] => 3
                    [cost] => 1000
                )

        )

    [leg2] => Array
        (
            [UPS] => Array
                (
                    [days] => 1
                    [cost] => 4000
                )

            [FedEx] => Array
                (
                    [days] => 1
                    [cost] => 3000
                )

            [Conway] => Array
                (
                    [days] => 2
                    [cost] => 5000
                )

        )

)

どうしているのが最適な組み合わせのテンション?

もうこれまで目のアルゴリズムは次のとおりである

  1. の最長の荷送人のための各脚
  2. 排除に"高"の一
  3. の安荷送人のための各脚
  4. 計算の総コスト&日
  5. 場合の日には、仕上げ、後藤1

早期英ッPHP(試験の配列を下記の作品swimminglyがしてしまうので、テストの配列からない、正しい組み合わせ):

$shippers["leg1"] = array(
    "UPS"    => array("days" => 1, "cost" => 4000),
    "Conway" => array("days" => 3, "cost" => 3200),
    "FedEx"  => array("days" => 8, "cost" => 1000)
);

$shippers["leg2"] = array(
    "UPS"    => array("days" => 1, "cost" => 3500),
    "Conway" => array("days" => 2, "cost" => 2800),
    "FedEx"  => array("days" => 4, "cost" => 900)
);

$shippers["leg3"] = array(
    "UPS"    => array("days" => 1, "cost" => 3500),
    "Conway" => array("days" => 2, "cost" => 2800),
    "FedEx"  => array("days" => 4, "cost" => 900)
);    

$times = 0;
$totalDays = 9999999;

print "<h1>Shippers to Choose From:</h1><pre>";
print_r($shippers);
print "</pre><br />";

while($totalDays > $maxDays && $times < 500){
            $totalDays = 0;
            $times++;
            $worstShipper = null;
            $longestShippers = null;
            $cheapestShippers = null;

            foreach($shippers as $legName => $leg){
                //find longest shipment for each leg (in terms of days)
                unset($longestShippers[$legName]);
                $longestDays = null;        

                if(count($leg) > 1){
                    foreach($leg as $shipperName => $shipper){
                        if(empty($longestDays) || $shipper["days"] > $longestDays){
                            $longestShippers[$legName]["days"] = $shipper["days"];
                            $longestShippers[$legName]["cost"] = $shipper["cost"];
                            $longestShippers[$legName]["name"] = $shipperName;
                            $longestDays = $shipper["days"];
                        }
                    }           
                }
            }

            foreach($longestShippers as $leg => $shipper){
                $shipper["totalCost"] = $shipper["days"] * $shipper["cost"];

                //print $shipper["totalCost"] . " &lt;?&gt; " . $worstShipper["totalCost"] . ";";

                if(empty($worstShipper) || $shipper["totalCost"] > $worstShipper["totalCost"]){
                    $worstShipper = $shipper;
                    $worstShipperLeg = $leg;
                }
            }

            //print "worst shipper is: shippers[$worstShipperLeg][{$worstShipper['name']}]" . $shippers[$worstShipperLeg][$worstShipper["name"]]["days"];
            unset($shippers[$worstShipperLeg][$worstShipper["name"]]);

            print "<h1>Next:</h1><pre>";
            print_r($shippers);
            print "</pre><br />";

            foreach($shippers as $legName => $leg){
                //find cheapest shipment for each leg (in terms of cost)
                unset($cheapestShippers[$legName]);
                $lowestCost = null;

                foreach($leg as $shipperName => $shipper){
                    if(empty($lowestCost) || $shipper["cost"] < $lowestCost){
                        $cheapestShippers[$legName]["days"] = $shipper["days"];
                        $cheapestShippers[$legName]["cost"] = $shipper["cost"];
                        $cheapestShippers[$legName]["name"] = $shipperName;
                        $lowestCost = $shipper["cost"];
                    }
                }

                //recalculate days and see if we are under max days...
                $totalDays += $cheapestShippers[$legName]['days'];  
            }
            //print "<h2>totalDays: $totalDays</h2>";
        }

        print "<h1>Chosen Shippers:</h1><pre>";
        print_r($cheapestShippers);
        print "</pre>";

いいと思うが、実際には、ある種のものがたりない組み合わせ一(シリーズのループ)及び追加の"スコア"のそれぞれの一....

編集:を明確にすることから"宿題"課題(いすることができます。私が現在のプロジェクトです。

の要件としていて、常に変化しています。また、現在の制約の時間まで働き始めたこの問題に、私は一体A*アルゴリズム(またはDijkstraの最短経路はシンプレクスor something).しかし全てのモーフィングや、でも見ることができる場にしたいと思います。

のではないかと思いがあるものすべてのナメやってきたことをここで行うかは、経路探索アルゴリズムです。

役に立ちましたか?

解決

ように 最短経路のアルゴリズム, のように、Dijkstraので、重量の各パスによるコストも時間が止まっているパスの場合は時間を超えるおzemax®ファイルをご参照ください。べきもの最安値を取得するまでお客様の閾値のう

他のヒント

音のようにそのままを"線形計画問題です。でも僕た宿題を問題なう。

古典解決のLP問題と呼ばれる"シンプレクス手法"があります。Googleです。

しかし、利用する方法であれば、この問題を正しく策定について記述してください。

いることが可能である列挙すべての可能な経路のいので小さなセットです。そんなことな規模のものです。

音のような仕事に就く Dijkstraのアルゴリズム:

Dijkstraのアルゴリズムを考えるオランダのオペレーションズ-リサーチ学Edsger Dijkstra1959年 1 はグラフの探索アルゴリズムをこのシングルソースの最短経路問題のためのグラフは非負の端経路コストを出力する最短経路です。このアルゴリズムで使われているルーティングです。

また実施内容のWikipedia。

だいた5都市では、所定順序は、3種類しかありませんでした路線の間に隣接する都市で、私力します。けられています。

場合は、このた学校の宿題、たと考えられていたものであった出アルゴリズムが実際の規模も、今までのしょうか別のアプローチをしているのだ。

としてBaltimark、これは基本的に線形計画問題です。場合のみ係数の荷主の(1で、0は含まれないありませんでした(バイナリ)整数の各脚になり得るかということですが、より簡単にsolveable.今必要なものを見出(バイナリ)の整数線形計画(ILP)ヒューリスティックスとしての問題はNP-。見 Wikipediaに整数線形計画 リンク;マニングコースを使用した少なくとも 分枝限.

実は今のことについても話したいと思うので、この特別な場合はsolveableなILPとを目的としている日などで <=5です。開始の安いキャリアのための最初の選択肢(Conway5:1000).次回をお選びにな最も安い、8日4000通貨単位をもって中止す。によってその他もしもすべての結果を日>5その後最初に選択して次の格安便2:3000)、そしてアップに、フェデックスに。このことは、合計4日間9000通貨単位です。

その後、用スプルーンその他の検索のツリーが一部のサブツリー-ステージ結果コストの拡大について、そのサブツリー unsearchedかがえる。このことを知ることができること検索するサブツリーなより良い結果をもとにしていた場合の費用できません。

この回遊したり、タクシー.

この ナップザック問題.ウエイトの日は、会社の利益は$5000-コストの足を前に出す。すべて除去する負のコストのかございます!

ると思いDijkstraのアルゴリズムは、とても短います。

cmcculloh では、最小限のコストの制約にしたがいのあなたの5日間です。

なので、単なる発見が最も早い方なしているということだったが最安値、あるいは安いであるのに必要な金額です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top