bulanık mantık ile ilgili ilk örnek kodları ekliyorum. örneği açıklayım biraz ; servis ve yemek durumuna göre bahşiş veren bir bulanık mantık örneği. mesela servis iyi ve yemek kötü ise ona göre bir bahşiş miktarı, servis kötü yemek de kötü ise ayrı bir bahşiş vs.. diğer ihtimaller işte. Neyse kodları ekleyim yanına kısa kısa notlar da eklerim.Kodlar c++ kodudur. Bulanık mantık düzenleyici bir program ile mantığı oluşturduktan sonra kodları kendi oluşturuyor.
fl::Engine* engine = new fl::Engine; engine->setName("tipper1");
engine->addHedge(new fl::Any);
engine->addHedge(new fl::Extremely);
engine->addHedge(new fl::Not);
engine->addHedge(new fl::Seldom);
engine->addHedge(new fl::Somewhat);
engine->addHedge(new fl::Very);
// aslında burda biraz açıklama yapmam gerek, bulanık mantıkta bilinmesi gereken en önemli şey girişler ve kurallardır. Aşağıda girişleri tanımlandıktan sonra bu girişlere göre kurallar belirlenecek ve o kurallar dahilinde bahşiş miktarı gösterilecektir.
fl::InputVariable* inputVariable1 = new fl::InputVariable;
inputVariable1->setName("service");
inputVariable1->setRange(0.000, 10.000);
inputVariable1->addTerm(new fl::Gaussian("poor", 0.000,1.500));
inputVariable1->addTerm(new fl::Gaussian("good", 5.000,1.500));
inputVariable1->addTerm(new fl::Gaussian("excellent", 10.000,1.500));
engine->addInputVariable(inputVariable1);
fl::InputVariable* inputVariable2 = new fl::InputVariable;
inputVariable2->setName("food");
inputVariable2->setRange(0.000, 10.000);
inputVariable2->addTerm(new fl::Trapezoid("rancid", 0.000,0.000,1.000,3.000));
inputVariable2->addTerm(new fl::Trapezoid("delicious", 7.000,9.000,10.000,10.000));
engine->addInputVariable(inputVariable2);
fl::OutputVariable* outputVariable1 = new fl::OutputVariable;
outputVariable1->setName("tip");
outputVariable1->setRange(0.000, 30.000);
outputVariable1->setDefaultValue(std::numeric_limits<fl::scalar>::quiet_NaN());
outputVariable1->setLockDefuzzifiedValue(true);
outputVariable1->setDefuzzifier(new fl::Centroid(500));
outputVariable1->output()->setAccumulation(new fl::Maximum);
outputVariable1->addTerm(new fl::Triangle("cheap", 0.000,5.000,10.000));
outputVariable1->addTerm(new fl::Triangle("average", 10.000,15.000,20.000));
outputVariable1->addTerm(new fl::Triangle("generous", 20.000,25.000,30.000));
engine->addOutputVariable(outputVariable1);
fl::RuleBlock* ruleblock1 = new fl::RuleBlock;
ruleblock1->setName("");
ruleblock1->setTnorm(new fl::Minimum);
ruleblock1->setSnorm(new fl::Maximum);
ruleblock1->setActivation(new fl::Minimum);
ruleblock1->addRule(fl::MamdaniRule: parse(
"if service is poor or food is rancid then tip is cheap", engine));
ruleblock1->addRule(fl::MamdaniRule: parse(
"if service is good then tip is average", engine));
ruleblock1->addRule(fl::MamdaniRule: parse(
"if service is excellent or food is delicious then tip is generous", engine));
engine->addRuleBlock(ruleblock1);