陳鍾誠的程式作品 -- PetriNet (派氏網路)
程式作品C 語言JavaC#JavaScript常用函數文字處理遊戲程式衛星定位系統程式資料結構網路程式自然語言人工智慧機率統計資訊安全等待完成訊息相關網站參考文獻最新修改簡體版English |
PetriNet 1package ccc; public class PetriNet extends Agent { int h=10,o=8,h2o=0,s=20,so2=0; public static void main(String[] args) throws Exception { System.out.println("PetriNet.main()"); AgentWorld world = new AgentWorld(); PetriNet net = new PetriNet(); world.varMap.put("p", net); world.runRules("p:h2o();p:so2()".split(";"), 5); } public String act(String exp) { if (exp.equals("h2o()")) { if (h>=2 && o>=1) { h-=2; o-=1; h2o+=1; return toString(); } } else if (exp.equals("so2()")) { if (s>=1 && o>=2) { s-=1; o-=2; so2+=1; return toString(); } } return "fail"; } public String toString() { return "H="+h+" O="+o+" S="+s+" H2O="+h2o+" SO2="+so2; } } PetriNet 2package ccc; import java.util.*; public class PetriNet1 extends Agent { String[] vars; public static void main(String[] args) throws Exception { System.out.println("PetriNet.main()"); AgentWorld world = new AgentWorld(); PetriNet1 net = new PetriNet1(); net.varMap = world.varMap; world.varMap.put("p", net); world.varMap.putObjs("h=10,o=8,h2o=0,s=20,so2=0".split(",")); net.vars = "h,o,h2o,s,so2".split(","); world.varMap.put("kb", "2h+1o=1h2o;p:1s+2o=1so2".split(";"), 5); } public String act(String pExp) { if (!pExp.matches("([\\w+\\+\\-]+)=([\\w+\\+\\-]+)")) return "fail"; String[] inTerms = STR.head(pExp, "=").split("\\+"); String[] outTerms = STR.tail(pExp, "=").split("\\+"); boolean isPass = true; for (int i=0; i<inTerms.length; i++) { String[] groups = REGEX.groups(inTerms[i], "(\\d+)(\\w+)"); double coef = Double.parseDouble(groups[0]); String var = groups[1]; double now = varMap.getDouble(var); if (now < coef) isPass = false; } if (!isPass) return "fail"; for (int i=0; i<inTerms.length; i++) { String[] groups = REGEX.groups(inTerms[i], "(\\d+)(\\w+)"); double coef = Double.parseDouble(groups[0]); String var = groups[1]; varMap.add(var, new Double(-1*coef)); } for (int i=0; i<outTerms.length; i++) { String[] groups = REGEX.groups(outTerms[i], "(\\d+)(\\w+)"); double coef = Double.parseDouble(groups[0]); String var = groups[1]; double now = varMap.getDouble(var); System.out.println("out:"+var+"("+now+"+"+coef+")"); varMap.add(var, new Double(coef)); } return toString(); } public String toString() { return varMap.getStrs(vars); } } PetriNet 3package ccc; import java.util.*; public class PetriNet { public static void main(String[] args) throws Exception { AgentWorld world = new AgentWorld(); world.setVars("h=10,o=8,h2o=0,s=20,so2=0"); world.addAgent(new PetriRule("2h+1o=1h2o")); world.addAgent(new PetriRule("1s+2o=1so2")); for (int i=0; i<10; i++) world.run(); } } class PetriRule extends Agent { String[] inVars, outVars; double[] inWeights, outWeights; PetriRule(String pRule) throws Exception { super(pRule); if (!pRule.matches("([\\w+\\+\\-]+)=([\\w+\\+\\-]+)")) throw new Exception("PetriRule:format error"); String[] inTerms = STR.head(pRule, "=").split("\\+"); inVars = new String[inTerms.length]; inWeights = new double[inTerms.length]; parseExp(inTerms, inVars, inWeights); String[] outTerms = STR.tail(pRule, "=").split("\\+"); outVars = new String[outTerms.length]; outWeights = new double[outTerms.length]; parseExp(outTerms, outVars, outWeights); } public void parseExp(String[] terms, String[] vars, double[] weights) { for (int i=0; i<terms.length; i++) { String[] groups = REGEX.groups(terms[i], "(\\d+)(\\w+)"); weights[i] = Double.parseDouble(groups[0]); vars[i] = groups[1]; } } public String act(VarMap senseMap) { boolean isPass = true; for (int i=0; i<inVars.length; i++) { double now = varMap.getDouble(inVars[i]); if (now < inWeights[i]) isPass = false; } if (!isPass) return "fail"; for (int i=0; i<inVars.length; i++) varMap.add(inVars[i], new Double(-1*inWeights[i])); for (int i=0; i<outVars.length; i++) { double now = varMap.getDouble(outVars[i]); varMap.add(outVars[i], new Double(outWeights[i])); } return senseMap.toString(); } } |
page revision: 0, last edited: 04 Nov 2010 03:45
Post preview:
Close preview