最大流图的Java仿真

最大流图的Java仿真,java,graph,simulation,Java,Graph,Simulation,我正在为联盟体育编写Java程序,该程序将遍历每个球队当前的比赛集和他们下一场比赛的日程安排,然后在此基础上创建一个流网络模型。该计划的目的是找出哪些球队已经被淘汰,没有机会赢得或与其他球队分享一个位置。在分析网络后(应用EdmondsKarp算法),我找出团队是否被淘汰。现在我还想模拟一下。我正在使用JGraph作为图形库,并且可能会使用JGraph进行可视化(原因:一旦我创建了JGraph对象,我就可以简单地用它们实例化JGraph对象并显示图形)。昨天我还发现Jung框架看起来不错 主要的

我正在为联盟体育编写Java程序,该程序将遍历每个球队当前的比赛集和他们下一场比赛的日程安排,然后在此基础上创建一个流网络模型。该计划的目的是找出哪些球队已经被淘汰,没有机会赢得或与其他球队分享一个位置。在分析网络后(应用EdmondsKarp算法),我找出团队是否被淘汰。现在我还想模拟一下。我正在使用JGraph作为图形库,并且可能会使用JGraph进行可视化(原因:一旦我创建了JGraph对象,我就可以简单地用它们实例化JGraph对象并显示图形)。昨天我还发现Jung框架看起来不错


主要的问题是我从来没有写过模拟,这正是我需要“Hello World”帮助的地方。当我说模拟时,我的意思是我想直观地显示算法执行的每一部分,这里是一个示例场景:算法必须找到扩充路径,所以我想显示每一条新边何时添加到扩充路径。用户将能够播放和停止动画。我还想展示所有边流的变化以及类似的东西。到目前为止,我的算法还在运行,但我不知道如何进行模拟。我应该使用单独的线程来执行模拟吗?我是否应该编写单独的类,作为算法执行,但状态记录甚至不知道实际算法(因为我不想中断实际算法的性能)。我是否应该使用当前的算法,并在它们之间添加一些行,以便在一些数据结构中保存执行状态,以便稍后向用户显示模拟?任何想法都可能会有所帮助。

如果我理解正确,您是在寻求一种方法来设置算法动画,并从动画中以交互方式控制其执行,这与模拟不同(模拟只执行一个模型,通常是在给定的时间间隔内执行的——这与用户交互或动画无关,但当然也可以将两者结合起来)

我建议您将问题分为两个主要部分:交互和动画。这两个部分都可以通过应用以下方法来解决:

  • 要与算法交互,请确定要区分的“原子步骤”,例如,向路径添加一条边。然后,您可以扩展算法,使其也能分步工作,或者编写一个额外的类来包装算法,并为分步执行提供必要的例程

  • 若要为算法所处的当前状态设置动画,应使用,其中动画组件是观察者,并在其状态更改时收到算法的通知,例如,将边添加到路径。您还可以通过传递提示(例如已添加到路径的边对象)来描述实际状态更改;这可能使人们更容易想象新旧国家之间的区别

关于线程问题:算法可能应该在一个额外的线程中运行(除非它非常快),您也可以将动画放在一个额外的线程中(这可能已经由JGraph提供了,只需检查文档或按照建议使用其组件即可)。但是,您应该注意,您的算法的运行时性能几乎肯定会受到信息的影响,即使它正在另一个线程中运行(因为通知仍然必须由算法完成),因此请小心进行性能分析,并使用未设置动画的版本进行此类研究