OptaPlanner 7.32.0.Finalバージョンの卵 - バッチ解決SolverManager

前の紹介OptaPlanner 7.32.0.FinalバージョンSolverManager非同期インタフェース・ソリューション機能を提供します。バルク解決 - この記事のお得な情報は、他の機能SolverManagerを紹介し続けています。

該当シーン

日次計画システムでは、エンジンの運転時間が不足してできるように、リアルタイム高に特にシーンで、より多くの制限を実行するための時間を確保するために、ほとんどの場合、問題を解決します。したがって、この場合には、瞬間、計画業務の開始後にプログラムを解くことから結果を取得する必要性をお待ちしております。しかし、いくつかのケースでは、我々は時に大規模な問題が発生した際に、エンジンは時間の最適解比較的短い期間を見つけることができない、さらにいくつかのケースでは、長い間、実現可能な解決策が見つかりませんでした十分な時間を実行しないでください。その理由として、私は、問題のNPC、NP-ハード規模のハウツー記事へOptaPlannerの指示に戻って参照することができます。

そのため、いくつかの大規模な、タイムクリティカルな場面で、我々はエンジンが自動的に自分の空き時間に計算させることができます。例えば、(など夜、休日、など)非労働時間に定期的なジョブによって問題がより大規模な計画業務のエンジンを始動するために、作業を次の日、あなたは、演算結果を得ることができるとき。SolverManagerを公開する前に、我々は、操作手順の適切なタイミングを設計するために、さまざまなシナリオのために、自動的にエンジン動作をさせることができます。もちろん、この方法の問題点は、非同期計画である完全なアーキテクチャを設計するために、特定のシステム設計の経験が必要です。SolverManagerインタフェース7.32.0.Finalリリースでは、これらのニーズを達成するための簡単な方法を提供します。

SolverManagerバッチ計画特性

SolverManagerインタフェースの詳細については、あなたはさまざまな方法がメソッドに渡されたパラメータとして、問題の課題を解決するだけでなく、問題がSolverManager sovle方法を使用して解決されたソルバーオブジェクトを解決するだけでなく、あなたがproblemIDなどのパラメータを渡す必要があるはずです。計画が完了した後SolverManagerは、同時に複数の問題の解決には、さまざまな問題を特定する方法がなければならない可能性があるため実際には、このパラメータにも、理解され、呼び出し側はまた、識別番号を指定することで、対応するプログラムを入手する必要があります。、解決するために複数の問題に同時に問題SolverManagerの数のための要件は何ですか?その振る舞いは、それを解決する方法ですか?

SolverManager一括解決行動

どのように多くの問題を同時に解決することができますか?

実際には、バルクSolverManagerが問題を解決する達成することができないだけではなく、複数の並列問題解決に同時に達成することができます。parallelSolverCount SolverManagerプロパティを提供することにより、エンジンの数がバッチ操作に設けられていてもよい、という問題を並行して解決することができます。SolverMangerが操作開始を解く場合には、ある数は、空間的に並列動作を解くセットparallelSolverCountローディングの問題であろう。通常parallelSolverCount値はCPU、メモリ、および他のコンピュータリソース、および問題の複雑さに基づいて計算することができます。この数を決定することができない場合、parallelSolverCountが自動的に並列計算問題の数を決定するために、特定の状況に応じてAUTO、エンジンに設定することができる、通常、並列コアの数がCPUの数の半分です。

これは、マルチスレッドコンピューティング(マルチスレッド増分解決)の前に溶液プロセスと、ここで並列計算問題複数の、二つの概念であることは注目に値します。並列計算をマルチスレッド、可能な解決策の異なるサブセットが(主演算制約およびヒューリスティックスコアを行う)を算出同時に複数のスレッドに分割され、問題の解決にエンジンを指します。同時に解決複数の問題に直面したとき、溶液プロセスSolverManager、parallelSolverCount属性セットの大部分は、エンジンの多くの問題です。あなたは、マルチスレッドの増分の解決も、問題を解決するときに、エンジンが複数の問題を解決するために並行して、複数のCPUコアを使用することができるように、起動している場合ことを想像することができます。この問題はそれほど単純ではない場合に対処しました。だから、あなたがない限りしている複雑さ、CPUコアと、問題のコンピューティングパワーを動的かつ自動的に並列ソリューションを決定するコンピューティングリソースの動作時のエンジン運転状態に応じて、それ以外の場合はこの2つの機能、またはセットを自動的良くする、非常に明確です質問の数、および各質問スレッドの数は、解決のプロセスを開始する必要があります。リソースの使用率を向上させることができ、マルチスレッド、マルチスレッドプログラミングの友人が知っておくべき、単一のCPUを経験し、時には制御のスレッド数が良くありませんが、パフォーマンスは逆効果である、最も単純には、CPUを切り替えるスレッドが一定を消費しますです資源。

バッチ解決の役割

リアルタイム・プランニングのためのいくつかのあまり必要で、ソルバーは、操作に時間がかかる場合は、バッチ解決がより良い役割を果たすことができる、あまりにも頻繁に必要としません。このような非常に大きくなる可能性が起因するオフ計画本当の問題空間の数が多いため、大規模なサプライチェーン・プランニング・四半期または年を行う必要として、それが最適なソリューションにライン相対的に、でも唯一の実行可能な解決策を得るために長い時間がかかります。これにより、サーバリソースの利用率を向上させること、自分の空き時間でそのエンジン作動ので(夜間たとえば、非稼働日)、バッチの方法によって解決することができます。

基本的な使い方

公式SolverManager関連するコードの例があった場合、次の例では、OptaPlannerユーザーガイドの一例であり、私たち最初のメイクリファレンス、サンプルプログラムでSolverManagerコードを勉強する時間がない、一時的に知りませんが、そうでない場合は、後でときにIこれらの機能を試してみてください自分の、一つのことは、他の人に書き出します。

パブリック クラスTimeTableService { 

    プライベート SolverManager <時刻表、ロング> solverManager。

    // 戻り値はすぐに、すべてのデータセットのためにそれを呼び出す
    公共 無効solveBatch {(ロングtimeTableId)
        solverManager.solve(timeTableIdは、
                // 解決の開始時に一度呼び出され、
                この.findByIdを、
                 // 両端に解く場合、一度呼び出されます
                。この.SAVEを)。
    } 

    公共の時刻表findById(ロングtimeTableId){...} 

    パブリック 無効の保存(時刻表時刻表){...} 

}

 

あなたは、記事が参考に感じて、コメントを親指を歓迎した場合、元のは、容易ではありません。記事は、批判を歓迎し、省略しています。

時間から公開シリアル番号、してください注意を払うの時間に対するパブリック数(APSは、それを可能にする)タイムリーに受け取るために、2次元コードへの記事のこのシリーズ:

http://weixin.qq.com/r/WjtFXSvE2HanrW8_925I  (自動識別次元コード)


OptaPlannerアプリケーションの詳細については、にメールを送ってください。[email protected]
あなたの意見を表明したり、ディスカッショングループ:https://groups.google.com/forum/#!forum/optaplanner-cn
場合より複雑な質問、提案や方法が提案されているメールのディスカッション・グループによって、我々はマイクロチャンネル(13631823503)またはQQ(12977379)リアルタイム通信を追加する必要がありますが、私は忙しい毎日の仕事だ、マイクロ手紙を通じて、QQや他のツールは、綿密なコミュニケーションではないかもしれません。(国内のネットワークに属するGoogleのメーリングリストディスカッショングループは、解決する必要がアクセスするのが難しいかもしれません)

おすすめ

転載: www.cnblogs.com/kentzhang/p/12364917.html