問題タブ [drools-planner]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1026 参照

drools - drools ルールの最小 2 つの変数

drools ルールの LHS (左側) で 2 つの変数の最小値を見つけたいと考えています。例えば:

では、最小値をどのように見つけるかが問題です。ありがとう。

0 投票する
1 に答える
131 参照

java - Drools Planner の構築Heuristic java.lang.ClassCastException

Drools Planner 5.4.Final Contruction Heuristic Type BEST_FITを使用してソリューションを初期化しようとしました。

実行時の評価中に次のエラーが発生します

誰にもヒントはありますか?

ありがとう

これはスタックトレースです

0 投票する
1 に答える
860 参照

java - OptaPlanner CVRPTW - 継続的な配信

私は OptaPlanner を初めて使用し、CVRPTW の問題を解決するために自分のプロジェクトで OptaPlanner を構成しようとしています。私の現在の構成は、プロジェクトのソース コードにある例と非常に似ていますが、私の要件は異なります。私のアプリケーションは、次の場合に継続的な配信リクエストを受け取ります。

  • 平均サービス時間は 5 分です
  • DueTime - ReadyTime = 10 分
  • ロケーション間の平均距離 (時間) は約 2.5 分です。
  • デポは1つだけ

私の考えは、新しいリクエストが受信されるたびに解決アルゴリズムを再実行することです。これは、リクエストが実行可能かどうか、または時間を前後にシフトする必要があるかどうかを理解するために必要です。次の問題ステートメントを検討するとします (場所は省略されていますが、デポの場所からかなり等距離です)。

利用可能な車両が 2 台あり、どちらも定員 10 名であることを考慮すると、次の解が得られます (各車両の時刻表)。

ここで、D は需要、Ar.T は到着時間、Ap.T は接近時間 (選択した場所に時間通りに到着するために前の場所を離れる必要がある時間)、Prev.D は前の場所からの距離 (時間) です。 Next.D は、次の場所からの距離 (時間) です。

ご覧のとおり、顧客 4 はあまりにも早く配達を受け取ります (到着時間は 12:33:56 ですが、準備時間は 13:25:00 です)。私は、 arrivalBeforeReadyTimeというルールが非常に柔軟な制約であることを理解していますが、プランナーは、予約済みの配送を使用して顧客 4 に配送することを提案することを期待しています。ルールarrivalBeforeReadyTimeを追加の厳しい制約として設定すると、ほとんどの場合、次の例外が発生します。

2 つの質問があります。

  1. 上記の例外が発生した場合、「未解決の問題」としてキャッチする必要がありますか? または、構成を調整する必要がありますか? もらってはいけないものですか?
  2. 継続的デリバリーのシナリオはどのように管理すればよいですか? 個別に解決するには、異なる大きな時間枠を定義する必要がありますか? しかし、これらのウィンドウの境界を定義する方法は? また、国境を越えて計画された配送をどのように管理するのでしょうか? (この解決策は私には正しくないようです)

編集1:

OptaPlanner のバージョンを 6.0.0.CR3 から 6.0.0.CR4-Pre1 に更新すると、NullPointerException が解決されました。ドキュメントはリアルタイム計画について明確であり、プランナーをリアルタイム モードで実行することをすでに検討していました。しかし、上記の例では結果が良くなかったので、その状況を管理するために他に何ができるかを理解しようとしていました. ルールarrivalBeforeReadyTimeをソフト制約からハード制約に切り替えたところ、NullPointerExceptionが発生せず、タイムスケジュールが適切に管理されているようで、結果は次のようになりました(例):

問題文:

解決

ご覧のとおり、需要の合計が車両の容量を超えているため、最初の配送は実行できません。それが正しいと考えるべきですか?つまり、その場合の良い解決策は、両方の車両を使用して顧客を管理することです 1、2、3。vehicleCapacity を厳しい制約として、例と同じ構成を使用しています。さらに、ハード制約を使用している場合も、顧客 2 と 1 は準備時間の前に提供されます。

0 投票する
1 に答える
837 参照

drools - OptaPlanner CVRPTW - 容量の問題を解決

次の CVRPTW 問題があり、OptaPlanner で適切な解決策を見つけようとしています。時刻は hh:mm:ss 形式です。

私のDRLファイルはこんな感じです。さらに、準備完了時間前の到着に関連する厳しい制約も定義しました。私のソルバー構成は次のようになりますが、終了タグが異なります。

これは問題のステートメントです:

10 個のアイテムと 1 つのデポを収容できる 2 台の車両があります。

これが解決策です (車両ごとにグループ化され、到着時間によって並べ替えられた顧客):

(D = デマンド、Ar.T = 到着時間、Prev.D = 前の場所からの距離、Next.D の次の場所からの距離)

ご覧のとおり、車両 2 は 6+4+5+2+3=20 個のアイテムを輸送する必要があり、これは容量を超えています。構成の容量に関連する厳しい制約がある場合に、ソルバーがこのソリューションを提案する理由がわかりません。

私のルールを考えると、これは受け入れられる解決策ではありません。何か不足していますか?ソルバーが解を提供しない状況はありませんか? 「ソルバーが失敗した」終了が考えられますか?

0 投票する
1 に答える
1038 参照

java - OptaPlanner の配車ルートと顧客訪問間の関係

OptaPlanner を使用して、提供されている例と非常によく似た車両のルーティングの問題を最適化しています。

私は次の課題に直面しており、いくつかのアイデアに感謝します。

顧客への訪問の一部は、他の訪問と関係があります。次に例を示します。

  • 訪問は、別の訪問と同時に開始する必要があります。
  • 訪問は、別の訪問が終了してから 2 時間後に開始する必要があります。
  • 訪問は、別の訪問に割り当てられた同じ車両に割り当てる必要があります。

課題は次のとおりです: 訪問の 1 つを移動する際に、スコアを下げることなく訪問の移動を許可するにはどうすればよいでしょうか?

各訪問は異なるチャイン (異なる車両に割り当てられている) にある可能性があるため、提供されているすべての移動セレクターは、1 回の訪問のみを変更する移動を提供する可能性が高くなります。このような移動は、依存関係のためにスコアが低くなる可能性が高く、選択されることはありません。

同じ開始シナリオ: 1 回の訪問の開始時間を変更する動きは、スコアが低くなります。同じ車両のシナリオ: 1 回の訪問を別の車両に変更すると、スコアが低くなります。

現在、タブー検索を使用しており、満足のいく結果が得られています。遅い受け入れが答えかもしれません。

ありがとう。

0 投票する
1 に答える
286 参照

drools-planner - optaplanner で新しいアルゴリズムを実装するにはどうすればよいですか?

私の修士論文では、「強化学習」を optaplanner に実装し、例でモデル化されている問題でアルゴリズムをテストしたいと考えていますが、その方法を理解するのに役立つガイドまたはドキュメントが必要です。手伝って頂けますか?

0 投票する
1 に答える
729 参照

drools-planner - OptaPlanner 構築フェーズ - フィルターを定義する方法はありますか?

ローカル検索フェーズでは、エンティティ、値、移動のフィルターを構成できます。必要に応じて、カスタム ムーブ ファクトリを提供することもできます。

ただし、建設段階で同じことを行う方法に関するドキュメントは見つかりません。唯一の構成は、ヒューリスティック タイプと forager です: Chapter 8. Construction heuristics

非常に難しいルールのいくつかをフィルターに実装したいのですが、構築段階でフィルタリングする機能がないため、不適切な構築を避けるために、それらをスコアリング ルールとして定義する必要があります。

建設段階のフィルターを定義する方法はありますか?