高速道路での車の乗り方をシミュレートするシミュレーターを Java で作成する必要があります。高速道路には 3 車線が必要で、すべての車線に一定速度の車があります。このハイウェイには、他の車に衝突しないように通り抜けなければならないエージェントが 1 人います。詳細な説明は、この論文のセクション 2.5 と画像 5 にあります。
この画像は前述の論文からのもので、高速道路の外観を示しています。
私の目標は、エージェントのロジックではなく、シミュレーター (および GUI) のみを作成することです。今、私はこのシミュレーターのアーキテクチャーを設計したいと思っています。ここで助けが必要です。
私の考えでは、エージェントの API がどのように見えるかは次のとおりです。
public abstract class BaseAgent {
public abstract void run()
public abstract void onCrash();
}
高速道路上のエージェント (車) は、このクラスの子孫である必要があります。run()
すべてのステップで、エージェントのロジックであるシミュレーター呼び出し関数。この関数では、エージェントは次のような関数を呼び出すことができます:
goLeft();
goRight();
getNearestCarInLane(int lane_no);
getMySpeed();
したがって、すべてのステップで、エージェントは現在の車線にとどまるか、左折するか右折するかを決定できます。エージェントができることは以上です。
これはエージェント API ですが、シミュレーターの残りの部分をどのように設計すればよいかわかりません。アーキテクチャをシミュレートする最初の試みは次のとおりです。
class Agent — descendant of BaseAgent, can ride on highway.
class Highway — stores position of all cars on highway.
class Simulator — creates instance of agent and highway; in every step, call agent’s `run()` and monitors any car crash.
これは良いアーキテクチャではありません。どのクラスにメソッドを配置する必要がgoLeft()
ありgoRight()
ますgetNearestCarInLane()
か? これらのメソッドはBaseAgent
クラス内にある必要がありますが、高速道路上のすべての車の位置を知る必要があるためです。だから最後に、私はこのようなものを持っていました:
Simulator s = new Simulator();
Highway h = new Highway();
Agent a = new Agent();
s.setAgent(a);
s.setHighway(h);
a.setHighway(h);
h.setAgent(a);
そして、それはひどく醜いです。
だから私はここで賢い人々からの助けが必要です。シミュレーター/アーキテクチャーに関する本や記事へのリンクを教えてもらえますか? または、私が間違っていることを説明してください。
私はプログラマーではありません。このプロジェクトは、ソフトウェア エンジニアリングという学部のオプション コースの一部です。