Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 辩论俱乐部分配应用程序的设计_Java_Design Patterns_Mathematical Optimization - Fatal编程技术网

Java 辩论俱乐部分配应用程序的设计

Java 辩论俱乐部分配应用程序的设计,java,design-patterns,mathematical-optimization,Java,Design Patterns,Mathematical Optimization,对于我所在大学的辩论俱乐部,我被要求创建一个分配辩论环节的应用程序,我遇到了一些困难,无法想出一个好的设计方案。我会用Java来做。以下是我们需要的: 关于英国石油公司的辩论,你需要了解的是:有四个小组,每个小组由两名辩论者和一名法官组成。这四个组被分配了一个特定的位置:gov1、gov2、op1、op2。团队内部的秩序没有意义 该应用程序的目标是获取在场的辩论者作为输入(例如,如果有20人,我们将举行2场辩论),并根据每个辩论者的历史将他们分配给团队和角色,以便: 每个辩论者都应该与尽可能多

对于我所在大学的辩论俱乐部,我被要求创建一个分配辩论环节的应用程序,我遇到了一些困难,无法想出一个好的设计方案。我会用Java来做。以下是我们需要的:

关于英国石油公司的辩论,你需要了解的是:有四个小组,每个小组由两名辩论者和一名法官组成。这四个组被分配了一个特定的位置:gov1、gov2、op1、op2。团队内部的秩序没有意义

该应用程序的目标是获取在场的辩论者作为输入(例如,如果有20人,我们将举行2场辩论),并根据每个辩论者的历史将他们分配给团队和角色,以便:

  • 每个辩论者都应该与尽可能多的人进行辩论
  • 每个辩论者应该在不同的立场上进行统一的辩论
  • 辩论应该是公平的——辩论者有不同的经验水平,这应该尽可能公平——也就是说,不应该有一个由两个经验丰富的辩论者和一个由初级辩论者组成的团队
  • 用户可以选择以各种方式限制分配,例如:
    • 规定两个人应该在一起辩论,是否处于特定的位置
    • 指定单个辩论者应处于特定位置,而不考虑合作伙伴
如果有人能给我一些关于这个应用程序设计的建议,我将非常感激! 此外,我以前从未实现过GUI,因此我也希望能在这方面提供一些指导,但这不是目前的主要问题


此外,还有将辩论者信息保存在文件中的问题,我也从未用Java实现过这一点,我也想了解一些有关这方面的技巧。

这似乎是一个教科书上的约束问题。尽管有GUI,它还是非常适合Prolog这样的技术(EclipseProlog附带了两个不同的Java集成库)

但是,既然您希望在Java中实现这一点,为什么不将辩论者的历史存储在sql数据库中,并使用sql语言来构造约束呢。然后,您可以将这些SQL查询包装为Java方法。

有两个部分(如果将输入和/或保存数据计算在内,则为三个部分)、底层算法和UI

对于用户界面,我很奇怪。我使用(有一个指向我的sourceforge项目的链接)。必须完成Java版本,这不会太难。这很奇怪,因为很少有人使用过它,但它节省了一个数量级的编码工作量

对于这个算法,问题看起来很小,我可以用一个简单的树搜索来解决它。我会有一个计分算法,然后用最好的分数报告时间表


这是一个鸟瞰式的概述,我将如何处理它。

@Greg Harman不是严格地用Prolog描述约束和实际解决方案,而不是优化?SQL也是一样的问题。我并没有像被问到的那样把这个问题看作是关于优化的。。。但无论如何,我认为如何应用这些工具取决于你。如果您担心的是您想要一个角色的最佳候选人(即使他没有完全满足所有要求),那么您应该在约束中使用不等式或聚合(例如,选择…其中分数=最大(…)限制1)。我知道这个评论非常笼统,但我认为答案是Prolog和Java/SQL非常通用,可以被精心设计来做几乎任何你需要的事情。