//Input Variablen //--------------- //H?he Range: 0 - 1000 void control() { LinguisticVariable hoehe = new LinguisticVariable("hoehe"); hoehe.add("sehrHoch", 500, 700, 1000, 1030); hoehe.add("hoch", 300, 500, 550, 750); hoehe.add("normal", 150, 300, 400, 550); hoehe.add("niedrig", 50, 100, 150, 200); hoehe.add("sehrNiedrig", -1000, 0, 50, 100); hoehe.setInputValue(map(sensors.getSensor("height").getValue(), 0, scene.HEIGHT, 0, 1000)); g2.setValue(map(sensors.getSensor("height").getValue(), 0, scene.HEIGHT, 0, 1000)); //Windrichtung Range: 90 - 270 LinguisticVariable windRichtung = new LinguisticVariable("windRichtung"); windRichtung.add("vorne", 110, 180, 180, 250); windRichtung.add("oben", 180, 270, 270, 270); windRichtung.add("unten", 90, 90, 90, 180); windRichtung.add("halbUnten", 100, 140, 140, 180); windRichtung.add("halbOben", 180, 220, 220, 260); windRichtung.setInputValue(wind.angle); g3.setValue(wind.angle); //Windst?rke Range: 0 - 500 LinguisticVariable windStaerke = new LinguisticVariable("windStaerke"); windStaerke.add("sehrSchwach", 0, 0, 50, 100); windStaerke.add("schwach", 50, 100, 150, 200); windStaerke.add("normal", 150, 200, 300, 350); windStaerke.add("stark", 300, 350, 400, 450); windStaerke.add("sehrStark", 400, 450, 500, 500); windStaerke.setInputValue(map(wind.power, 0, 10, 0, 500)); g4.setValue(map(wind.power, 0, 10, 0, 500)); //Flugzeug Geschwindigkeit Range: 0 - 1000 LinguisticVariable flugzeugGeschwindigkeit = new LinguisticVariable("flugzeugGeschwindigkeit"); flugzeugGeschwindigkeit.add("sehrLangsam", -30, 0, 100, 150); flugzeugGeschwindigkeit.add("langsam", 100, 200, 250, 350); flugzeugGeschwindigkeit.add("normal", 300, 400, 600, 700); flugzeugGeschwindigkeit.add("schnell", 600, 700, 800, 900); flugzeugGeschwindigkeit.add("sehrSchnell", 800, 900, 1000, 1030); flugzeugGeschwindigkeit.setInputValue(map(sensors.getSensor("speed").getValue(), 0, 30, 0, 1000)); g5.setValue(map(sensors.getSensor("speed").getValue(), 0, 30, 0, 1000)); //Flugzeug Richtung Range: -90 - 90 LinguisticVariable flugzeugRichtungInput = new LinguisticVariable("flugzeugRichtungInput"); flugzeugRichtungInput.add("sehrSteilRunter", -100, -90, -70, -45); flugzeugRichtungInput.add("steilRunter", -60, -40, -20, 0); flugzeugRichtungInput.add("normal", -30, -15, 15, 30); flugzeugRichtungInput.add("steilRauf", 0, 20, 40, 60); flugzeugRichtungInput.add("sehrSteilRauf", 45, 70, 90, 100); flugzeugRichtungInput.setInputValue(plane.angle); g1.setValue(plane.angle); //Output Variablen //---------------- //Motorenst?rke Range: 0 - 100 LinguisticVariable motorenstaerke = new LinguisticVariable("motorenstaerke"); motorenstaerke.add("sehrSchwach", 0, 0, 10, 20); motorenstaerke.add("schwach", 10, 20, 30, 40); motorenstaerke.add("normal", 30, 40, 60, 70); motorenstaerke.add("stark", 60, 70, 80, 90); motorenstaerke.add("sehrStark", 80, 90, 100, 100); //Flugzeug Richtung Range: -90 - 90 LinguisticVariable flugzeugRichtungOutput = new LinguisticVariable("flugzeugRichtungOutput"); flugzeugRichtungOutput.add("sehrSteilRauf", -100, -90, -70, -45); flugzeugRichtungOutput.add("steilRauf", -60, -40, -20, 0); flugzeugRichtungOutput.add("normal", -30, -15, 15, 30); flugzeugRichtungOutput.add("steilRunter", 0, 20, 40, 60); flugzeugRichtungOutput.add("sehrSteilRunter", 45, 70, 90, 100); //Fuzzy Enginge initialisieren FuzzyEngine fuzzyEngine = new FuzzyEngine(); //LVs registrieren fuzzyEngine.register(hoehe); fuzzyEngine.register(windRichtung); fuzzyEngine.register(windStaerke); fuzzyEngine.register(flugzeugGeschwindigkeit); fuzzyEngine.register(flugzeugRichtungInput); fuzzyEngine.register(motorenstaerke); fuzzyEngine.register(flugzeugRichtungOutput); //Regeln definieren try { fuzzyEngine.evaluateRule("if hoehe is sehrHoch then flugzeugRichtungOutput is sehrSteilRunter"); fuzzyEngine.evaluateRule("if hoehe is sehrNiedrig then flugzeugRichtungOutput is sehrSteilRauf"); fuzzyEngine.evaluateRule("if hoehe is niedrig then flugzeugRichtungOutput is steilRauf"); fuzzyEngine.evaluateRule("if hoehe is hoch then flugzeugRichtungOutput is steilRunter"); fuzzyEngine.evaluateRule("if hoehe is normal then flugzeugRichtungOutput is normal"); fuzzyEngine.evaluateRule("if flugzeugGeschwindigkeit is sehrLangsam then motorenstaerke is sehrStark"); fuzzyEngine.evaluateRule("if flugzeugGeschwindigkeit is langsam then motorenstaerke is stark"); fuzzyEngine.evaluateRule("if flugzeugGeschwindigkeit is normal then motorenstaerke is normal"); fuzzyEngine.evaluateRule("if flugzeugGeschwindigkeit is schnell then motorenstaerke is schwach"); fuzzyEngine.evaluateRule("if flugzeugGeschwindigkeit is sehrSchnell then motorenstaerke is sehrSchwach"); fuzzyEngine.evaluateRule("if windStaerke is sehrStark then motorenstaerke is sehrStark"); fuzzyEngine.evaluateRule("if windStaerke is stark then motorenstaerke is stark"); fuzzyEngine.evaluateRule("if hoehe is sehrNiedrig and flugzeugRichtungInput is sehrSteilRunter then flugzeugRichtungOutput is sehrSteilRauf"); fuzzyEngine.evaluateRule("if hoehe is sehrNiedrig and flugzeugRichtungInput is steilRunter then flugzeugRichtungOutput is sehrSteilRauf"); fuzzyEngine.evaluateRule("if hoehe is sehrNiedrig and flugzeugRichtungInput is normal then flugzeugRichtungOutput is steilRauf"); fuzzyEngine.evaluateRule("if hoehe is sehrNiedrig and flugzeugRichtungInput is steilRauf then flugzeugRichtungOutput is normal"); fuzzyEngine.evaluateRule("if hoehe is sehrNiedrig and flugzeugRichtungInput is sehrSteilRauf then flugzeugRichtungOutput is normal"); fuzzyEngine.evaluateRule("if hoehe is niedrig and flugzeugRichtungInput is sehrSteilRauf then flugzeugRichtungOutput is normal"); fuzzyEngine.evaluateRule("if hoehe is niedrig and flugzeugRichtungInput is steilRauf then flugzeugRichtungOutput is normal"); fuzzyEngine.evaluateRule("if hoehe is niedrig and flugzeugRichtungInput is normal then flugzeugRichtungOutput is steilRauf"); fuzzyEngine.evaluateRule("if hoehe is niedrig and flugzeugRichtungInput is steilRauf then flugzeugRichtungOutput is normal"); fuzzyEngine.evaluateRule("if hoehe is niedrig and flugzeugRichtungInput is sehrSteilRauf then flugzeugRichtungOutput is normal"); fuzzyEngine.evaluateRule("if hoehe is hoch and flugzeugRichtungInput is normal then flugzeugRichtungOutput is steilRunter"); fuzzyEngine.evaluateRule("if hoehe is hoch and flugzeugRichtungInput is steilRauf then flugzeugRichtungOutput is sehrSteilRunter"); fuzzyEngine.evaluateRule("if hoehe is hoch and flugzeugRichtungInput is sehrSteilRauf then flugzeugRichtungOutput is sehrSteilRunter"); fuzzyEngine.evaluateRule("if hoehe is sehrHoch and flugzeugRichtungInput is steilRunter then flugzeugRichtungOutput is sehrSteilRunter"); fuzzyEngine.evaluateRule("if hoehe is sehrHoch and flugzeugRichtungInput is normal then flugzeugRichtungOutput is sehrSteilRunter"); fuzzyEngine.evaluateRule("if hoehe is sehrHoch and flugzeugRichtungInput is steilRauf then flugzeugRichtungOutput is sehrSteilRunter"); fuzzyEngine.evaluateRule("if hoehe is sehrHoch and flugzeugRichtungInput is sehrSteilRauf then flugzeugRichtungOutput is sehrSteilRunter"); fuzzyEngine.evaluateRule("if windRichtung is oben then flugzeugRichtungOutput is sehrSteilRauf"); fuzzyEngine.evaluateRule("if windRichtung is unten then flugzeugRichtungOutput is sehrSteilRunter"); fuzzyEngine.evaluateRule("if windRichtung is halbUnten then flugzeugRichtungOutput is steilRunter"); fuzzyEngine.evaluateRule("if windRichtung is halbOben then flugzeugRichtungOutput is steilRauf"); //Ergebnisse errechnen plane.power = (float) motorenstaerke.defuzzify(); plane.angle = (int) flugzeugRichtungOutput.defuzzify(); g6.setValue(plane.power); g7.setValue(plane.angle); } catch (Exception ex) { } }