整个设计涉及5个游戏2种类型,分别为
l 路径图形相关
a) 最短路径
b) 物流中心选址
c) 最优路径
l 表格相关
a) 单周期模型
i. 最大利润模型
ii. 最小损失模型
b) 预测
i. 直线预测,
ii. 二次抛物线预测
iii. 指数平滑法
iv. 回归分析法
v. 趋势平均数法
5个游戏10个算法在调研、学习、分析并理解算法的基础上,经过不懈的努力和编程测试使用java实现的。算法的介绍在各个游戏的说明中有相关文档,内容枯燥晦涩难懂,在这里不作介绍。在设计界面的过程中,综合考虑所有的算法,把算法的表现形式分为两个大类,图形路径相关和表格相关。图形路径相关的界面程序的基本需求就是:根据用户在界面上画出的城市节点和路径信息计算出一个最优化的结果。表格相关的基本需求是:根据用户在表格中输入的数据产生出一个最终的结果,结果是一个数字。根据以上的两个基本需求,下面逐一介绍界面设计的过程。
图形路径相关的界面需要能接纳并处理用户的操作,用户的操作包括:在可视化的面板上画出城市节点,修改城市节点的基本信息:城市名字和权重,在城市与城市之间需要连线,代表城市之间的距离;距离的大小根据需要进行调整,删除错误的路径,删除错误的城市节点,计算结果,查看计算的结果,保存图形,打开已经保存过的图形,退出程序,查看程序的介绍和说明。在以上的需求中,比较困难也比较核心的需求就是画出城市节点和连线。使用Swing作为画图的程序有许多可用的插件,但是作者使用JBuilder或者其他的做图(GUI)程序需要学习的时间,生成的代码页并不总是很理想。所以作者决定一行行的写代码,这样对程序有完全的掌控。整个设计分为以下的几个部分
所有的图形元素都必须实现IElement接口,在IElement接口中定义了图形元素的通用操作,他们是标准的Get和set方法,主要的get和set方法有:前景色,背景色,元素名称(用于保存和打开以及构建元素原型),元素的具体类型(用于打开),画笔粗细等,以及一些方法:画图方法,被选中状态的画图方式,元素的中心位置(拖拽操作使用),是否包含某个点的位置(用于决定元素是否可以被选中),属性对话框操作,图形元素显示的优先级(用于在点击图形叠加的位置时,决定哪个元素被选中),本次设计中由于不需要多种点的类型,所以只设计了两种元素,一种为点CityNode,另一种为线,Path,代表两个城市之间的路径。使用者可以根据需要在面板上画出所有需要的城市节点和节点之间的连线,设置城市节点的属性名字和权重,设置路径的长度,所有这些操作都可以通过快捷键、工具条、菜单栏或者右键进行操作。游戏提供了保存和打开的功能,用于存储界面上的元素。在内部组织中使用一个List对象缓存所有的界面元素,保存和打开都操作这个对象。在进行计算的过程中,也需要传输这个对象到适配器对象,由适配器进行过滤抽取操作。
算法的设计:算法的设计独立于图形界面元素的开发,无论从开发时间还是考虑到扩展性都语图形界面元素没有太大的关系。因此算法的开发就需要考虑不同情况的应用。根据OOP的指导思想:对于每个算法 ,首先设计其通用的接口,接口方法尽量简单,其次设计抽象类,实现接口中的通用方法,每个具体类的算法都扩展自抽象类。再次设计测试类,针对接口进行测试。在经过若干天或者由不同的人来调用该类只用重新温习一下测试程序即可。在这一点上,即使是自己开发的程序接口,过个一周之后再次回头看这个程序,也需要测试程序的帮忙。
下面是预测的类图:
预测的返回结果是一个数字,因此可以使用一个接口:下面是针对接口的测试例子:
public class TestLineForetell extends BaseTestCase {
public TestLineForetell(String method) {
super(method);
}
public void testAoyunGold() {
IForeTell f = new LineForeTell();
f.setNum(6);
f.setData(1, 15);
f.setData(2, 5);
f.setData(3, 16);
f.setData(4, 16);
f.setData(5, 28);
f.setData(6, 32);
f.setWillTime(7);
log.debug("ForTell AoyunGold:" + f.getForetellData());
}
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new TestLineForetell("testAoyunGold"));
return suite;
}
}
适配器的设计:当界面程序和算法程序已经设计完毕,就需要一个适配器来把界面元素的信息转换成算法能识别的信息,经过算法的计算,适配器在把计算的结果转换成界面程序可以识别的信息,并表现出来。适配器没有固定的接口,主要是因为不同类型的算法计算的结果类型不完全一样,比如路径的计算结果可能是多个数组,而预测计算的结果仅仅是一个数字。下面是关于预测的一个适配器:package com.logis.game.adapter.foretell;
public class ForetellAdapter {
private IForeTell foretell;
private List<DataRow> data;
public double doWork(String willTime) {
for (DataRow dRow : data) {
if (isBlank(dRow.getValue(0)) || isBlank(dRow.getValue(1)))
data.remove(dRow);
}
foretell.setNum(data.size());
for (DataRow dRow : data) {
int time = getInt(dRow.getValue(0));
double d = getDouble(dRow.getValue(1));
foretell.setData(time, d);
}
if (!isBlank(willTime)) {
foretell.setWillTime(getInt(willTime));
return foretell.getForetellData();
}
return 0.0;
}
public String getExplainStr() {
return foretell.getExplainStr();
}
public boolean isBlank(String str) {
return str == null || "".equals(str);
}
public int getInt(String str) {
int result = 0;
try {
result = Integer.parseInt(str);
if (result < 0) {
result = 0; MyLogger.debug("把" + str + "修正为" + result);
}
} catch (Exception e) {
MyLogger.debug("转换为正数失败:" + str);
}
return result;
}
public double getDouble(String str) {
double result = 0.0;
try {
result = Double.parseDouble(str);
if (result < 0) {
result = 0;
MyLogger.debug("把" + str + "修正为" + result);
}
} catch (Exception e) {
MyLogger.debug("转换为正数失败:" + str);
}
return result;
}
public IForeTell getForetell() {
return foretell;
}
public void setForetell(IForeTell foretell) {
this.foretell = foretell;
}
public List<DataRow> getData() {
return data;
}
public void setData(List<DataRow> data) {
this.data = data;
}
}
欢迎大家讨论指正。
分享到:
相关推荐
通过对物流配送中心选址模型及其算法的分析,本研究不仅提供了一个可行的数学模型来指导配送中心的选址决策,而且还提出了一种有效的算法来求解该模型。这种方法能够帮助企业在物流网络设计时做出更加合理和经济的...
在不同行业中,模型算法规划有着广泛的应用场景,比如物流配送中的路径规划、金融领域的风险评估、制造行业的生产调度等。 #### 二、模型构建 模型构建是模型算法规划的基础步骤之一。在这个过程中,需要根据问题...
总之,针对物流配送路径优化问题的遗传算法实现,对于提高物流配送效率、降低运营成本以及改善客户满意度等方面都具有重要的实际应用价值。通过Matlab平台实现的遗传算法,能够提供一种科学的、系统的解决方案,帮助...
该源码实现了一个基于遗传算法的双层规划模型,能够高效地解决复杂的优化问题。 知识点1:遗传算法 遗传算法是一种基于自然选择和遗传的优化算法,它模拟了生物进化的过程,通过选择、交叉和变异来搜索最优解。该...
物流配送中心选址模型及其启发式算法 随着经济的全球化和电子商务的快速发展,物流配送中心在供应链管理中的地位日益重要。合理的物流配送中心选址能够降低成本、提高运营效率,对企业的市场竞争力和客户服务水平...
### 物流配送车辆调度问题的模型和算法研究 #### 概述 物流配送车辆调度问题(Vehicle Routing Problem, VRP)是物流管理和运输领域的一个重要课题,它涉及到如何最有效地规划配送路线来满足客户的配送需求,同时...
总结来说,时效性物流联运方式选择模型及其算法是物流管理中用于优化运输决策的工具,通过0-1整数规划模型和遗传算法,能够在满足时间和服务质量要求的同时,实现成本最小化。这种模型和算法的应用对于提升物流行业...
本文基于张静等人在《重庆大学学报》(自然科学版)2006年第29卷第5期发表的论文,深入探讨网络最大流模型算法及其在计算机编程中的实现。 #### 算法原理与设计思想 网络最大流算法的核心在于通过不断寻找网络中的...
**遗传算法实现CVRP问题详解** 遗传算法(Genetic Algorithm, GA)是一种模拟生物进化过程的优化算法,常用于解决复杂、多目标的优化问题。在本案例中,我们探讨的是如何运用遗传算法来解决车辆路径规划问题...
总的来说,基于离散粒子群算法的城市物流节点选址模型为解决此类复杂问题提供了一种有效的方法。通过模拟自然界的智能行为,DPSO能够处理多因素、多约束的优化问题,为物流行业提供更经济、高效的节点布局方案。同时...
本文主要探讨了在需求驱动的供应链管理背景下,如何构建一个高效的分销配送网络优化模型,并提出了一种有效的算法来解决这一模型中的复杂优化问题。在现代供应链管理中,分销配送网络的设计对于提高物流效率、降低...
本文提出了一种基于四叉树原理的车辆路线问题解决方案,并通过两阶段启发式算法实现了对该问题的有效优化。该方法不仅能够降低计算复杂度,还能显著提高计算效率,具有较好的实际应用价值。未来的研究将进一步探索...
《一汽国际物流仓储规划模型与算法》是一份详细介绍物流仓储规划和优化的PPT文档,主要涉及仓库规划流程、库房业务流程、优化支撑结构、优化方法以及系统逻辑结构等多个关键知识点。 首先,仓库规划流程是整个仓储...
由于给出的链接部分是百度网盘的分享地址,虽然无法直接用于知识内容的传播,但可以认为该链接包含的是关于数学建模模型算法规划模型的拓展资料或实例案例,可能是一些具体的建模实例、模型数据或相关教程,对于深入...
本文将探讨如何使用数学模型进行图结构优化,包括图的基本概念、优化目标、算法实现和实际应用案例。 图结构优化是提高系统性能和效率的重要手段。通过使用数学模型和算法,我们可以有效地解决图结构优化问题。随着...