Primjer upravljanja automobilom

Kod programa koji je potrebno ubaciti u FSIT:
 
FuzzyUniverse unUDALJ = integer discrete {-100,100,1};
FuzzyUniverse unBRZINE = integer discrete {0,100,1};
FuzzyUniverse unSMJER = integer enumerated {-1,1};

FuzzyUniverse unGAS = integer discrete {-10,10,1};
FuzzyUniverse unOKRET = integer discrete {-2,2,1};

FuzzyFunc brNULA = FuzzyTrokut(0,0,10) @ unBRZINE;
FuzzyFunc brMALA = FuzzyTrokut(0,30,60) @ unBRZINE;
FuzzyFunc brVELIKA = FuzzyTrapez(30,60,100,100) @ unBRZINE;

FuzzyFunc udaljNEG = FuzzyTrapez(-100,-100,-1,0) @ unUDALJ;
FuzzyFunc udaljKRITMALA = FuzzyTrapez(0,0,5,20) @ unUDALJ;
FuzzyFunc udaljMALA = FuzzyTrokut(10,30,60) @ unUDALJ;
FuzzyFunc udaljSRED = FuzzyTrokut(45,60,75) @ unUDALJ;
FuzzyFunc udaljVELIKA = FuzzyTrapez(60,80,100,100) @ unUDALJ;

FuzzyFunc gasVELNEG = FuzzyTrapez(-10,-10,-8,-2) @ unGAS;
FuzzyFunc gasMALNEG = FuzzyTrokut(-6,-3,0) @ unGAS;
FuzzyFunc gasNULA = FuzzyTrokut(-2,0,2) @ unGAS;
FuzzyFunc gasMALPOZ = FuzzyTrokut(0,3,6) @ unGAS;
FuzzyFunc gasVELPOZ = FuzzyTrapez(2,8,10,10) @ unGAS;

FuzzyFunc smjerPRAVI = FuzzyTrokut(0,1,2) @ unSMJER;
FuzzyFunc smjerKRIVI = FuzzyTrokut(-2,-1,0) @ unSMJER;

FuzzyFunc okretDA = FuzzyTrokut(-1,1,2) @ unOKRET;
FuzzyFunc okretNE = FuzzyTrokut(-2,-1,1) @ unOKRET;
 

FuzzyControlSystem sys1 (
  DefineVars( udalj, brzina, smjer ),
  DefineVars( gas, okreni ),
  Rules(

    Rule( 
     Min(
      ValueIn(brNULA,brzina),
      ValueIn(smjerKRIVI,smjer)
     ), okreni, okretDA 
    ),

    Rule( 
     Max(
      Not(ValueIn(brNULA,brzina)),
      ValueIn(smjerPRAVI,smjer)), okreni, okretNE 
    ),

    Rule( Not(ValueIn(smjerPRAVI,smjer)), gas, gasVELNEG ),

    Rule(
     Min(
      ValueIn(smjerPRAVI,smjer),
      Min(
       ValueIn(udaljVELIKA,udalj),
       Not(ValueIn(brVELIKA,brzina))
      )
     ), gas, gasVELPOZ 
    ),

    Rule(
     Min(
      ValueIn(smjerPRAVI,smjer),
      Min(
       ValueIn(udaljVELIKA,udalj),
       ValueIn(brVELIKA,brzina)
      )
     ), gas, gasMALPOZ 
    ),

    Rule( 
     Min(
      ValueIn(smjerPRAVI,smjer),
      Min(
       ValueIn(udaljMALA,udalj),
       ValueIn(brVELIKA,brzina)
      )
     ), gas, gasVELNEG 
    ),

    Rule( 
     Min(
      ValueIn(smjerPRAVI,smjer),
      Min(
       ValueIn(udaljMALA,udalj),
       ValueIn(brMALA,brzina)
      )
     ), gas, gasMALNEG 
    ),

    Rule( 
     Min(
      ValueIn(smjerPRAVI,smjer),
      Min(
       ValueIn(udaljSRED,udalj),
       ValueIn(brMALA,brzina)
      )
     ), gas, gasMALPOZ 
    ),

    Rule( 
     Min(
      ValueIn(smjerPRAVI,smjer),
      Min(
       ValueIn(udaljSRED,udalj),
       ValueIn(brVELIKA,brzina)
      )
     ), gas, gasMALNEG 
    ),

    Rule( 
     Min(
      ValueIn(smjerPRAVI,smjer),
      Min(
       Max(
        ValueIn(udaljSRED,udalj),
        ValueIn(udaljVELIKA,udalj)
       ),
       ValueIn(brNULA,brzina)
      )
     ), gas, gasVELPOZ 
    ),

    Rule( 
     Min(
      ValueIn(smjerPRAVI,smjer),
      Min(
       ValueIn(udaljMALA,udalj),
       ValueIn(brNULA,brzina)
      )
     ), gas, gasMALPOZ 
    ),

    Rule( 
     Min(
      ValueIn(smjerPRAVI,smjer),
      ValueIn(udaljKRITMALA,udalj)
     ), gas, gasVELNEG 
    ),

    Rule( 
     Min(
      ValueIn(smjerPRAVI,smjer),
      ValueIn(udaljNEG,udalj)
     ), gas, gasVELNEG 
    )
  ),
  1
);

/* Iscrtavanje skupova koji definiraju brzine */
Drawing(
 SetRange(0,100,0,1),
 SetTitle("Brzine"),
 DrawFunc( brNULA, {Color=red, PlotJoined=true} ),
 DrawFunc( brMALA, {Color=green, PlotJoined=true} ),
 DrawFunc( brVELIKA, {Color=blue, PlotJoined=true} )
);

/* Iscrtavanje skupova koji definiraju brzine */
Drawing(
 SetRange(-100,100,0,1),
 SetTitle("Udaljenosti"),
 DrawFunc( udaljNEG, {Color=red, PlotJoined=true} ),
 DrawFunc( udaljKRITMALA, {Color=green, PlotJoined=true} ),
 DrawFunc( udaljMALA, {Color=blue, PlotJoined=true} ),
 DrawFunc( udaljSRED, {Color=gray, PlotJoined=true} ),
 DrawFunc( udaljVELIKA, {Color=magenta, PlotJoined=true} )
);

/* Iscrtavanje skupova koji definiraju gas */
Drawing(
 SetRange(-10,10,0,1),
 SetTitle("Gas"),
 DrawFunc( gasVELNEG, {Color=red, PlotJoined=true} ),
 DrawFunc( gasMALNEG, {Color=green, PlotJoined=true} ),
 DrawFunc( gasNULA, {Color=blue, PlotJoined=true} ),
 DrawFunc( gasMALPOZ, {Color=gray, PlotJoined=true} ),
 DrawFunc( gasVELPOZ, {Color=magenta, PlotJoined=true} )
);

/* Iscrtavanje skupova koji definiraju smjer */
Drawing(
 SetRange(-1,1,0,1),
 SetTitle("Smjer"),
 DrawFunc( smjerPRAVI, {Color=red, PlotJoined=true} ),
 DrawFunc( smjerKRIVI, {Color=green, PlotJoined=true} )
);

/* Iscrtavanje skupova koji definiraju okret */
Drawing(
 SetRange(-2,2,0,1),
 SetTitle("Okret"),
 DrawFunc( okretDA, {Color=red, PlotJoined=true} ),
 DrawFunc( okretNE, {Color=green, PlotJoined=true} )
);

ExternalJavaCall Proba3;
 

Klasa Proba3.java nalazi se na ovom linku.

Iskompajlirana klasa Proba3.class veæ se nalazi u programu FSIT pa æe ovaj program raditi bez problema.