2017-09-18 10 views
0

私はOptaPlannerを使用して、車両によるサービスの要件が大きく異なる車両ルーティングの問題を解決しています。私はいくつかの最も一般的な顧客タイプを持ち、異なるエンティティクラスを使用してそれらをモデル化したいと考えています。単一のドライバーが異なるタイプに出席することが可能であるため、それらはすべてのクラスのインスタンスと異種のチェーンを形成することができます。OptaPlanner複数のエンティティクラス(チェーン付き変数あり)

VRPの例を変更して概念の証明を試みました。私はICustomerを抽出し、私のすべての顧客のためのインターフェイスであり、getNextCustomerICustomerを返すようにStandstillを変更しました。 私は顧客とそれを実行しようとCustomer2(顧客クラスのコピー)は、両方のICustomerを実装し、私はこのエラーを取得する場合:最悪の場合

Exception in thread "main" java.lang.IllegalArgumentException: The entityClass 
(interface org.optaplanner.examples.vehiclerouting.domain.Standstill) has a 
InverseRelationShadowVariable annotated property (nextCustomer) with a masterClass 
(interface org.optaplanner.examples.vehiclerouting.domain.ICustomer) which is not a 
valid planning entity. 

、私はちょうどで別の顧客のタイプをモデル化します列挙型と "ifs"を単一の計画エンティティで使用して、同じ動作を取得します。それでも、APIの制限に遭遇したか、誰かがこれを達成するためのよりよい方法を知っているかどうかを知ることは素晴らしいことです。ありがとう:)

答えて

1

OptaPlannerはポリモーフィズム、クラス階層などを完全にサポートしています。私たちはそのためのテストをしています(最近、7.3.final IIRCのように解決されたバグが定期的に見つかっています)。 TestDataSolution.javaなども参照してください。 PRはもちろん、新しい再生器も歓迎しています。

例外は別の話をします。そのフィールド/メソッドの戻り値の型である@InverseRelationShadowVariableをどこで使用するかを確認します。あなたのリファクタがそのコードに正しく影響を与えていない可能性があります。

関連する問題