public int GetPeopleCountForEnergy(double energyval) { if (energyval > 10000) { // return heating energy? return(5); } var energy = _fsTips.InputByName("energy"); //FuzzyVariable fvFood = fsTips.InputByName("food"); var people = _fsTips.OutputByName("people"); // // Associate input values with input variables // var inputValues = new Dictionary <FuzzyVariable, double> { { energy, energyval } }; var result = _fsTips.Calculate(inputValues); //_logger.Info(i + ": " + result[people].ToString("f1")); var resultval = Math.Round(result[people]); if (double.IsNaN(resultval)) { return(5); } return((int)resultval); }
public string CreateFuzzyRuleAndReturnResult(FetchRuleDTO rules, double inputValue) { FuzzySystemResultDTO system = new FuzzySystemResultDTO(); system = CreateSystem(rules, inputValue); _fsGround = system.System; inputValue = system.InputValue; FuzzyVariable fvInput = _fsGround.InputByName(rules.VariableList.FirstOrDefault(d => d.variableTypeID == (byte)Enums.VariableType.Input).visibleVariableName); FuzzyVariable fvOutput = _fsGround.OutputByName(rules.VariableList.FirstOrDefault(d => d.variableTypeID == (byte)Enums.VariableType.Output).visibleVariableName); Dictionary <FuzzyVariable, double> inputValues = new Dictionary <FuzzyVariable, double>(); inputValues.Add(fvInput, inputValue); Dictionary <FuzzyVariable, double> result = _fsGround.Calculate(inputValues); _fsGround.DefuzzificationMethod = DefuzzificationMethod.Centroid; double outputValue = result[fvOutput]; string outputType = ReturnLimitNearbyResults(rules, outputValue); return(outputType); }
public bool CanAttack(IEnumerable <Actor> ownUnits, IEnumerable <Actor> enemyUnits) { var inputValues = new Dictionary <FuzzyVariable, double>(); inputValues.Add(fuzzyEngine.InputByName("OwnHealth"), (double)NormalizedHealth(ownUnits, 100)); inputValues.Add(fuzzyEngine.InputByName("EnemyHealth"), (double)NormalizedHealth(enemyUnits, 100)); inputValues.Add(fuzzyEngine.InputByName("RelativeAttackPower"), (double)RelativePower(ownUnits, enemyUnits)); inputValues.Add(fuzzyEngine.InputByName("RelativeSpeed"), (double)RelativeSpeed(ownUnits, enemyUnits)); var result = fuzzyEngine.Calculate(inputValues); var attackChance = result[fuzzyEngine.OutputByName("AttackOrFlee")]; return(!double.IsNaN(attackChance) && attackChance < 30.0); }
public double obtenerCostoCalidad() { if (_fsCostoCalidad == null) { _fsCostoCalidad = CrearSistemaCostoCalidad(); if (_fsCostoCalidad == null) { return(-1); } } FuzzyVariable fvCalidadProducto = _fsCostoCalidad.InputByName("calidad_producto"); FuzzyVariable fvCostoTotal = _fsCostoCalidad.InputByName("costo_total"); FuzzyVariable fvPuntajeSoftware = _fsCostoCalidad.OutputByName("puntaje_software"); // // Associate input values with input variables // Dictionary <FuzzyVariable, double> inputValues = new Dictionary <FuzzyVariable, double>(); inputValues.Add(fvCalidadProducto, this.valorCalidadProducto); inputValues.Add(fvCostoTotal, this.valorCostoTotal); // // Calculate result: one output value for each output variable // Dictionary <FuzzyVariable, double> result = _fsCostoCalidad.Calculate(inputValues); // // Get output value for the 'tips' variable // if (result[fvPuntajeSoftware].ToString("f1").Equals("NeuN")) { Console.WriteLine("ESTA MALO EL VALOR DE PUNTAJE DE SOFTWARE"); return(-1); } else { return(result[fvPuntajeSoftware]); } }
public bool FuzzyGenerateRulesAndGetResultFLLComparison(GetRuleDTO rules, double inputValue1, double inputValue2, int rate) { FuzzySystemResultDTO system = new FuzzySystemResultDTO(); system = GenerateSystem(rules, inputValue1); _fsSoil = system.System; inputValue1 = system.InputValue; FuzzyVariable fvInput1 = _fsSoil.InputByName(rules.VariableList.FirstOrDefault(d => d.DegiskenTipID == (byte)Enums.VariableType.Input).DegiskenGorunenAdi); FuzzyVariable fvOutput1 = _fsSoil.OutputByName(rules.VariableList.FirstOrDefault(d => d.DegiskenTipID == (byte)Enums.VariableType.Output).DegiskenGorunenAdi); Dictionary <FuzzyVariable, double> inputValues1 = new Dictionary <FuzzyVariable, double>(); inputValues1.Add(fvInput1, inputValue1); Dictionary <FuzzyVariable, double> result1 = _fsSoil.Calculate(inputValues1); _fsSoil.DefuzzificationMethod = DefuzzificationMethod.Bisector; double outputValue1 = result1[fvOutput1]; _fsSoil = null; system = GenerateSystem(rules, inputValue2); _fsSoil = system.System; inputValue2 = system.InputValue; FuzzyVariable fvInput2 = _fsSoil.InputByName(rules.VariableList.FirstOrDefault(d => d.DegiskenTipID == (byte)Enums.VariableType.Input).DegiskenGorunenAdi); FuzzyVariable fvOutput2 = _fsSoil.OutputByName(rules.VariableList.FirstOrDefault(d => d.DegiskenTipID == (byte)Enums.VariableType.Output).DegiskenGorunenAdi); Dictionary <FuzzyVariable, double> inputValues2 = new Dictionary <FuzzyVariable, double>(); inputValues2.Add(fvInput2, inputValue2); Dictionary <FuzzyVariable, double> result2 = _fsSoil.Calculate(inputValues2); _fsSoil.DefuzzificationMethod = DefuzzificationMethod.Centroid; double outputValue2 = result2[fvOutput2]; var result = GetResultForProximity(outputValue1, outputValue2, rate); return(result); }
public bool CreateFuzzyRuleAndCompare(FetchRuleDTO rules, double inputValue1, double inputValue2, int ratio) { FuzzySystemResultDTO system = new FuzzySystemResultDTO(); system = CreateSystem(rules, inputValue1); _fsGround = system.System; inputValue1 = system.InputValue; FuzzyVariable fvInput1 = _fsGround.InputByName(session.variables.FirstOrDefault(d => d.variableTypeID == (byte)Enums.VariableType.Input).visibleVariableName); FuzzyVariable fvOutput1 = _fsGround.OutputByName(session.variables.FirstOrDefault(d => d.variableTypeID == (byte)Enums.VariableType.Output).visibleVariableName); Dictionary <FuzzyVariable, double> inputValues1 = new Dictionary <FuzzyVariable, double>(); inputValues1.Add(fvInput1, inputValue1); Dictionary <FuzzyVariable, double> result1 = _fsGround.Calculate(inputValues1); _fsGround.DefuzzificationMethod = DefuzzificationMethod.Bisector; double outputValue1 = result1[fvOutput1]; _fsGround = null; system = CreateSystem(rules, inputValue2); _fsGround = system.System; inputValue2 = system.InputValue; FuzzyVariable fvInput2 = _fsGround.InputByName(rules.VariableList.FirstOrDefault(d => d.variableTypeID == (byte)Enums.VariableType.Input).visibleVariableName); FuzzyVariable fvOutput2 = _fsGround.OutputByName(rules.VariableList.FirstOrDefault(d => d.variableTypeID == (byte)Enums.VariableType.Output).visibleVariableName); Dictionary <FuzzyVariable, double> inputValues2 = new Dictionary <FuzzyVariable, double>(); inputValues2.Add(fvInput2, inputValue2); Dictionary <FuzzyVariable, double> result2 = _fsGround.Calculate(inputValues2); _fsGround.DefuzzificationMethod = DefuzzificationMethod.Centroid; double outputValue2 = result2[fvOutput2]; var result = ReturnNearbyResults(outputValue1, outputValue2, ratio); return(result); }
private void btnRun_Click(object sender, EventArgs e) { // // Create new fuzzy system // if (_fsTips == null) { _fsTips = CreateSystem(); if (_fsTips == null) { return; } } // // Get variables from the system (for convinience only) // FuzzyVariable fvService = _fsTips.InputByName("service"); FuzzyVariable fvFood = _fsTips.InputByName("food"); FuzzyVariable fvTips = _fsTips.OutputByName("tips"); // // Associate input values with input variables // Dictionary <FuzzyVariable, double> inputValues = new Dictionary <FuzzyVariable, double>(); inputValues.Add(fvService, (double)nudInputService.Value); inputValues.Add(fvFood, (double)nudInputFood.Value); // // Calculate result: one output value for each output variable // Dictionary <FuzzyVariable, double> result = _fsTips.Calculate(inputValues); // // Get output value for the 'tips' variable // tbTips.Text = result[fvTips].ToString("f1"); }
public string FuzzyGenerateRulesAndGetResultFLL(GetRuleDTO rules, double inputValue) { //var ozdirenc = GorunenAdDuzenle(kuralKume.OzdirencList); //var toprak = GorunenAdDuzenle(kuralKume.ToprakList); FuzzySystemResultDTO system = new FuzzySystemResultDTO(); system = GenerateSystem(rules, inputValue); _fsSoil = system.System; inputValue = system.InputValue; FuzzyVariable fvInput = _fsSoil.InputByName(rules.VariableList.FirstOrDefault(d => d.DegiskenTipID == (byte)Enums.VariableType.Input).DegiskenGorunenAdi); FuzzyVariable fvOutput = _fsSoil.OutputByName(rules.VariableList.FirstOrDefault(d => d.DegiskenTipID == (byte)Enums.VariableType.Output).DegiskenGorunenAdi); Dictionary <FuzzyVariable, double> inputValues = new Dictionary <FuzzyVariable, double>(); inputValues.Add(fvInput, inputValue); Dictionary <FuzzyVariable, double> result = _fsSoil.Calculate(inputValues); _fsSoil.DefuzzificationMethod = DefuzzificationMethod.Centroid; double outputValue = result[fvOutput]; string outputType = GetResultForCloseLine(rules, outputValue); return(outputType); #region FuzzyIslemleri //#region Inputs //FuzzyVariable fvOzdirenc = new FuzzyVariable("Ozdirenc", 0.0, 1000.0); //foreach (var item in ozdirenc) //{ // fvOzdirenc.Terms.Add(new FuzzyTerm(item.Adi, new TriangularMembershipFunction(item.MinDeger, (item.MinDeger + item.MaxDeger) / 2, item.MaxDeger))); //} //fsToprak.Input.Add(fvOzdirenc); //FuzzyVariable fvMukavemet = new FuzzyVariable("Mukavemet", 0.0, 1000.0); //foreach (var item in _commonManager.Mukavemet) //{ // fvMukavemet.Terms.Add(new FuzzyTerm(item.Adi, new TriangularMembershipFunction(item.MinDeger, (item.MinDeger + item.MaxDeger) / 2, item.MaxDeger))); //} //fsToprak.Input.Add(fvMukavemet); //FuzzyVariable fvDoygunluk = new FuzzyVariable("Doygunluk", 0.0, 10.0); //foreach (var item in _commonManager.Doygunluk) //{ // fvDoygunluk.Terms.Add(new FuzzyTerm(item.Adi, new TriangularMembershipFunction(item.MinDeger, (item.MinDeger + item.MaxDeger) / 2, item.MaxDeger))); //} //fsToprak.Input.Add(fvDoygunluk); //#endregion //#region Output //FuzzyVariable fvToprak = new FuzzyVariable("Toprak", 0.0, 1000.0); //foreach (var item in toprak) //{ // fvToprak.Terms.Add(new FuzzyTerm(item.Adi, new TriangularMembershipFunction(item.MinDeger, (item.MinDeger + item.MaxDeger) / 2, item.MaxDeger))); //} //fsToprak.Output.Add(fvToprak); //#endregion //List<string> kurallar = new List<string>(); //foreach (var KuralListItem in kuralKume.KuralList) //{ // string ruleText = KuralOlustur(KuralListItem) + " then (Toprak is " + KuralListItem.Sonuc + ")"; // kurallar.Add(ruleText); //} #endregion }
void chooseTargetLocation() { FuzzyVariable fvHunger = _fsAstronaut.InputByName("Hunger"); FuzzyVariable fvThirst = _fsAstronaut.InputByName("Thirst"); FuzzyVariable fvTiredness = _fsAstronaut.InputByName("Tiredness"); FuzzyVariable svTarget = _fsAstronaut.OutputByName("Target"); Dictionary <FuzzyVariable, double> inputValues = new Dictionary <FuzzyVariable, double>(); inputValues.Add(fvHunger, _stats.Hungry); inputValues.Add(fvThirst, _stats.Thirsty); inputValues.Add(fvTiredness, _stats.Tiredness); targetLocation = null; Dictionary <FuzzyVariable, double> result = _fsAstronaut.Calculate(inputValues); Debug.Log("fuzzy result: " + result[svTarget]); if (targetLocation == null && result[svTarget] >= 0.0f && result[svTarget] < 0.3f) { Debug.Log("I WANT TO GO TO RESIDENTIAL AREA"); targetLocation = getModuleIfNotOccupied(ModuleType.ResidentalBay); if (null != targetLocation) { if (_stats.Tiredness < 0.3) { Debug.Log("I WANT TO REST THERE"); timeTargetSpentInArea = restCycle; } else if (_stats.Tiredness < 0.6) { Debug.Log("I WANT TO NAP THERE"); timeTargetSpentInArea = napCycle; } else { Debug.Log("I WANT TO SLEEP THERE"); timeTargetSpentInArea = sleepCycle; } } } if (targetLocation == null && result[svTarget] >= 0.3f && result[svTarget] < 0.6f) { Debug.Log("I WANT TO GO TO CANTEEN"); targetLocation = getModuleIfNotOccupied(ModuleType.Canteen); if (null != targetLocation) { timeTargetSpentInArea = hungerCanteenPerSecond * 100; } } if (targetLocation == null && result[svTarget] >= 0.6f) { Debug.Log("I WANT TO GO WORK"); System.Random rnd = new System.Random(); if ((float)rnd.NextDouble() >= 0.5f) { targetLocation = getModuleIfNotOccupied(ModuleType.Greenhouse); if (null != targetLocation) { timeTargetSpentInArea = tirednessGreenhousePerSecond * 300; } } else { targetLocation = getModuleIfNotOccupied(ModuleType.Gym); if (null != targetLocation) { timeTargetSpentInArea = tirednessGymPerSecond * 200; } } } }