谁说动态规则算法不能通用?我写了个通用算法,不知道能否通用,欢迎交流qq 15367481。
使用示例:
//定义状态 State a=new State("a"), b1=new State("b1"), b2=new State("b2"), b3=new State("b3"), c1=new State("c1"), c2=new State("c2"), c3=new State("c3"), d1=new State("d1"), d11=new State("d11"), d2=new State("d2"), e=new State("e"); DynamicProgram prog=new DynamicProgram(); //起点 prog.start=a; // 终点 prog.end=e; // 加入多阶段状态 prog.addPhase(b1, b2); prog.addPhase(c1,c2,c3); prog.addPhase(d1,d11, d2); // 加入状态转移时的决策 prog.addDecision(a, b1,2); prog.addDecision(a, b2,5); prog.addDecision(a, b3,1); prog.addDecision(b1,c1,12 ); prog.addDecision(b1,c2,14 ); prog.addDecision(b2,c1,6 ); prog.addDecision(b2,c2 ,10); prog.addDecision(b2,c3 ,4); prog.addDecision(b3,c1,10 ); prog.addDecision(b3,c2 ,12); prog.addDecision(b3,c3 ,11); prog.addDecision( c1,d1,3); prog.addDecision( c1,d11,1); prog.addDecision( c1,d2,9); prog.addDecision( c2,d1,6); prog.addDecision( c2,d2,5); prog.addDecision( c3,d2,10); prog.addDecision(d1,e ,5); prog.addDecision(d11,e ,7); prog.addDecision( d2,e,2); //状态变量的比较,取优 prog.chosePolicy=new Choose() { @Override public int compare(Object newStateVal,Object oldStateVal) { // 本示例中,最短路问题,找总距离小的 int oldV = ((Integer)oldStateVal).intValue(); int newV = ((Integer)newStateVal).intValue(); if(oldV==newV) return 0; else if(newV<oldV) return 1; else return -1; } @Override public Object getStateVal(Decision decision) { // 本示例中,总距离=上次距离+这次决策的距离 int stateVal = ((Integer)decision.from.stateVal ).intValue(); int cost = ((Integer)decision.cost).intValue(); return stateVal+ cost; } }; //求解 prog.start(); //打印路径 System.out.println("最小费用示例,找到2个最优的策略:"); System.out.println(e.stateVal); //最优策略集合 HashSet<LinkedList<State>> strategies = new HashSet<LinkedList<State>>(); prog.getStrategyState(strategies,new LinkedList<State>(),e); for(LinkedList<State> strategy:strategies){ // 打印所有策略 System.out.println(strategy); System.out.println(prog.getStrategyPath(strategy)); } System.out.println("\n最优路径中的子路径也是最优的:\n"+d1.stateVal); strategies = new HashSet<LinkedList<State>>(); prog.getStrategyState(strategies,new LinkedList<State>(),d1); for(LinkedList<State> strategy:strategies){ System.out.println(strategy); System.out.println(prog.getStrategyPath(strategy)); }
运行结果:
最小费用示例,找到2个最优的策略:
19
[a, b2, c1, d1, e]
[a->b2:5, b2->c1:6, c1->d1:3, d1->e:5]
[a, b2, c1, d11, e]
[a->b2:5, b2->c1:6, c1->d11:1, d11->e:7]
最优路径中的子路径也是最优的:
14
[a, b2, c1, d1]
[a->b2:5, b2->c1:6, c1->d1:3]
19
[a, b2, c1, d1, e]
[a->b2:5, b2->c1:6, c1->d1:3, d1->e:5]
[a, b2, c1, d11, e]
[a->b2:5, b2->c1:6, c1->d11:1, d11->e:7]
最优路径中的子路径也是最优的:
14
[a, b2, c1, d1]
[a->b2:5, b2->c1:6, c1->d1:3]
相关推荐
Tomasulo算法是一种著名的动态调度算法,用于优化现代计算机处理器中的指令执行,通过重叠不同指令的计算阶段来提高处理器的吞吐量。这个Java实现是帮助理解Tomasulo算法工作原理的一个很好的实践示例。 在Java代码...
Java作为一种通用且广泛使用的编程语言,提供了实现K-Means算法的良好平台,尤其适合初学者学习数据挖掘技术。 K-Means算法的核心步骤包括初始化中心点、计算样本到中心点的距离、重新分配样本点所属类别以及更新...
本文将深入探讨通用搜索算法及其在Java中的实现,以N皇后问题为例进行具体阐述。 1. **组合问题的通用搜索算法** 在组合问题中,通常涉及在状态空间树中进行搜索,以找到满足特定条件的解。状态空间树的搜索算法...
本资源"各种排序算法java实现"聚焦于将这些算法用Java代码来具体展示,对于学习和理解算法有着极大的帮助。 在Java中,我们通常会接触到以下几种经典的排序算法: 1. **冒泡排序**(Bubble Sort):通过不断交换...
Java作为一种多平台通用的编程语言,提供了丰富的API来支持DES算法的实现。 首先,我们需要了解DES算法的基本步骤,包括初始置换、16轮迭代和逆初始置换。每轮迭代由子密钥产生、置换选择、行移位和S盒替换四个步骤...
在Java编程语言中实现G.721算法,通常会涉及以下几个关键步骤: 1. **采样与量化**:首先,原始的模拟语音信号通过ADC(模数转换器)转换成数字信号,以8kHz的频率进行采样,得到16位的线性PCM(脉冲编码调制)数据...
在Java中实现CRC算法,通常涉及以下几个关键步骤: 1. **选择CRC多项式**:CRC有不同的版本,如CRC-8、CRC-16、CRC-32和CRC-64,每种对应不同的预定义多项式。例如,CRC-32使用的多项式是0x4C11DB7,CRC-16可能是0...
维特比算法(Viterbi Algorithm)是一种在序列模型中寻找最可能的解释序列的动态规划方法,尤其在通信、语音识别、自然语言处理等领域有着广泛的应用。算法的核心思想是找到一条通过观测序列的概率最高的状态路径,...
总的来说,"三平台通用加密算法"是实现跨平台数据安全的关键技术,涉及到了Java、.Net和Objective-C的加密API使用,以及加密过程中的编码解码、密钥管理和错误处理等多个环节。理解和掌握这些知识点对于开发安全的多...
在Java实现中,`BaseBoxChoose.java`可能包含了装箱算法的基本策略或基类,定义了装箱选择的接口和通用方法。`Slaves.java`可能是处理并行计算的部分,利用多线程并行处理多个箱子的装车问题,提高算法执行效率。`...
在这个项目中,我们将关注如何使用Java来实现关联规则算法,特别是Apriori算法。 首先,我们要理解Apriori算法的核心原理。Apriori算法是一种迭代的、基于频繁项集生成的算法,主要用于找出数据库中的频繁出现的项...
在水文学中,洪水调度算法通常基于数学模型,如动态规划、线性规划、遗传算法或模拟退火等。这些算法用于预测洪水的发生、传播和消退过程,以及根据预设的优化目标(如最小化损失、最大化安全系数等)来制定水库开闸...
`Sort.java`可能包含了一些通用的排序接口或抽象类,定义了排序算法的一些基本操作。`FileOp.java`可能用于文件操作,比如读取和写入算法分析文档或者原始数据。而`Frame1.java`可能是一个图形用户界面(GUI)的组件...
Apriori算法是一种在数据挖掘领域广泛应用的关联规则学习算法,主要用于发现大量交易数据中的频繁项集和强关联规则。...Java作为通用的编程语言,提供了灵活的实现方式,使得我们可以方便地将算法应用于各种实际场景。
Java作为一种通用的编程语言,被广泛用于实现各种算法,包括卷积。在这个“java实现卷积算法.zip”压缩包中,我们可以期待找到一个用Java编写的卷积算法实现。 卷积是一种数学运算,它在两个函数之间进行,通常是...
标题中的"delphi,java des算法通用加解密源码"指的是使用DES(Data Encryption Standard)算法实现的加密和解密功能,适用于两种不同的编程语言:Delphi和Java。DES是一种广泛使用的对称加密算法,它基于块密码设计...