⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 migrationfc.cpp

📁 人工智能中模糊逻辑算法 FuzzyLib 2.0 is a comprehensive C++ Fuzzy Logic library for constructing fuzzy logic sy
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//---------------------------------------------------------------------------
#include "MigrationFC.h"
//---------------------------------------------------------------------------




////////////////////////////////////////////////////////////////////////////////
TMigrationFC::TMigrationFC(/*TFragment* fragment*/)
{
	// create new controller for assessing migration candidacy
	C1 = new TFuzzyController();

	// add input and output variables
  	C1->clear_input_variables();
	C1->add_input_variable(new TVariable("RemoteDemand",     "", 00.0,   100.0));
	C1->add_input_variable(new TVariable("LocalDemand",      "", 00.0,   100.0));
	C1->output_variable =  new TVariable("RemoteAttraction", "", 00.0,   100.0);

                    // bias variable, <50 means fast becomes high
    int centre;     // bias variable, 50 means linearly becomes high
                    // bias variable, >50 means slow becomes high


	// add fuzzysets to the input and output variables
    centre  = 40;   // input 1
  	C1->input_variables[0]->clear_fuzzysets();
    C1->input_variables[0]->add_fuzzyset(new TFuzzySet(C1->input_variables[0], "Low", 	    S_CURVE  , DOWN , 0.00*centre, -0.0,        0.50*centre,         -0.0,                1.00*centre));
    C1->input_variables[0]->add_fuzzyset(new TFuzzySet(C1->input_variables[0], "Medium", 	PI_CURVE , UP   , 0.00*centre, 0.50*centre, 1.00*centre,         (100.0-0.50*centre), 100.0      ));
    C1->input_variables[0]->add_fuzzyset(new TFuzzySet(C1->input_variables[0], "High",   	S_CURVE  , UP   , 1.00*centre, -0.0,        (100.0-0.50*centre), -0.0,                100.0      ));
    centre  = 60;   // input 2
  	C1->input_variables[1]->clear_fuzzysets();
    C1->input_variables[1]->add_fuzzyset(new TFuzzySet(C1->input_variables[1], "Low", 	    S_CURVE  , DOWN , 0.00*centre, -0.0,        0.50*centre,         -0.0,                1.00*centre));
    C1->input_variables[1]->add_fuzzyset(new TFuzzySet(C1->input_variables[1], "Medium", 	PI_CURVE , UP   , 0.00*centre, 0.50*centre, 1.00*centre,         (100.0-0.50*centre), 100.0      ));
    C1->input_variables[1]->add_fuzzyset(new TFuzzySet(C1->input_variables[1], "High",   	S_CURVE  , UP   , 1.00*centre, -0.0,        (100.0-0.50*centre), -0.0,                100.0      ));
    centre  = 50;   // output
  	C1->output_variable->clear_fuzzysets();
    C1->output_variable->add_fuzzyset(new TFuzzySet(C1->output_variable, "Low", 	S_CURVE  , DOWN , 0.00*centre, -0.0,        0.50*centre,         -0.0,                1.00*centre));
    C1->output_variable->add_fuzzyset(new TFuzzySet(C1->output_variable, "Medium", 	PI_CURVE , UP   , 0.00*centre, 0.50*centre, 1.00*centre,         (100.0-0.50*centre), 100.0      ));
    C1->output_variable->add_fuzzyset(new TFuzzySet(C1->output_variable, "High",   	S_CURVE  , UP   , 1.00*centre, -0.0,        (100.0-0.50*centre), -0.0,                100.0      ));


	// create empty rules    (conditional, alpha,  weight)
    C1->clear_rules();
    C1->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C1->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C1->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C1->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C1->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C1->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C1->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C1->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C1->add_rule(new TFuzzyRule(true,         0.00,   1.0));


	// setup rules              remote_demand        local_demand         candidacy
    //----------------------------------------------------------------------------------
    //
    if (C1->rules[0] != NULL)
    {
    C1->rules[0]->predicate->clear_premises();
    C1->rules[0]->predicate->clear_operators();
    C1->rules[0]->predicate->add_premise(new TPremise(C1->input_variables[0]->fuzzysets[0]));
    C1->rules[0]->predicate->add_operator(0);
    C1->rules[0]->predicate->add_premise(new TPremise(C1->input_variables[1]->fuzzysets[0]));
    C1->rules[0]->consequent->set_premise(new TPremise(C1->output_variable->fuzzysets[0]));
    }
    if (C1->rules[1] != NULL)
    {
    C1->rules[1]->predicate->clear_premises();
    C1->rules[1]->predicate->clear_operators();
    C1->rules[1]->predicate->add_premise(new TPremise(C1->input_variables[0]->fuzzysets[0]));
    C1->rules[1]->predicate->add_operator(0);
    C1->rules[1]->predicate->add_premise(new TPremise(C1->input_variables[1]->fuzzysets[1]));
    C1->rules[1]->consequent->set_premise(new TPremise(C1->output_variable->fuzzysets[0]));
    }
    if (C1->rules[2] != NULL)
    {
    C1->rules[2]->predicate->clear_premises();
    C1->rules[2]->predicate->clear_operators();
    C1->rules[2]->predicate->add_premise(new TPremise(C1->input_variables[0]->fuzzysets[0]));
    C1->rules[2]->predicate->add_operator(0);
    C1->rules[2]->predicate->add_premise(new TPremise(C1->input_variables[1]->fuzzysets[2]));
    C1->rules[2]->consequent->set_premise(new TPremise(C1->output_variable->fuzzysets[0]));
    }
    if (C1->rules[3] != NULL)
    {
    C1->rules[3]->predicate->clear_premises();
    C1->rules[3]->predicate->clear_operators();
    C1->rules[3]->predicate->add_premise(new TPremise(C1->input_variables[0]->fuzzysets[1]));
    C1->rules[3]->predicate->add_operator(0);
    C1->rules[3]->predicate->add_premise(new TPremise(C1->input_variables[1]->fuzzysets[0]));
    C1->rules[3]->consequent->set_premise(new TPremise(C1->output_variable->fuzzysets[1]));
    }
    if (C1->rules[4] != NULL)
    {
    C1->rules[4]->predicate->clear_premises();
    C1->rules[4]->predicate->clear_operators();
    C1->rules[4]->predicate->add_premise(new TPremise(C1->input_variables[0]->fuzzysets[1]));
    C1->rules[4]->predicate->add_operator(0);
    C1->rules[4]->predicate->add_premise(new TPremise(C1->input_variables[1]->fuzzysets[1]));
    C1->rules[4]->consequent->set_premise(new TPremise(C1->output_variable->fuzzysets[0]));
    }
    if (C1->rules[5] != NULL)
    {
    C1->rules[5]->predicate->clear_premises();
    C1->rules[5]->predicate->clear_operators();
    C1->rules[5]->predicate->add_premise(new TPremise(C1->input_variables[0]->fuzzysets[1]));
    C1->rules[5]->predicate->add_operator(0);
    C1->rules[5]->predicate->add_premise(new TPremise(C1->input_variables[1]->fuzzysets[2]));
    C1->rules[5]->consequent->set_premise(new TPremise(C1->output_variable->fuzzysets[0]));
    }
    if (C1->rules[6] != NULL)
    {
    C1->rules[6]->predicate->clear_premises();
    C1->rules[6]->predicate->clear_operators();
    C1->rules[6]->predicate->add_premise(new TPremise(C1->input_variables[0]->fuzzysets[2]));
    C1->rules[6]->predicate->add_operator(0);
    C1->rules[6]->predicate->add_premise(new TPremise(C1->input_variables[1]->fuzzysets[0]));
    C1->rules[6]->consequent->set_premise(new TPremise(C1->output_variable->fuzzysets[2]));
    }
    if (C1->rules[7] != NULL)
    {
    C1->rules[7]->predicate->clear_premises();
    C1->rules[7]->predicate->clear_operators();
    C1->rules[7]->predicate->add_premise(new TPremise(C1->input_variables[0]->fuzzysets[2]));
    C1->rules[7]->predicate->add_operator(0);
    C1->rules[7]->predicate->add_premise(new TPremise(C1->input_variables[1]->fuzzysets[1]));
    C1->rules[7]->consequent->set_premise(new TPremise(C1->output_variable->fuzzysets[1]));
    }
    if (C1->rules[8] != NULL)
    {
    C1->rules[8]->predicate->clear_premises();
    C1->rules[8]->predicate->clear_operators();
    C1->rules[8]->predicate->add_premise(new TPremise(C1->input_variables[0]->fuzzysets[2]));
    C1->rules[8]->predicate->add_operator(0);
    C1->rules[8]->predicate->add_premise(new TPremise(C1->input_variables[1]->fuzzysets[2]));
    C1->rules[8]->consequent->set_premise(new TPremise(C1->output_variable->fuzzysets[0]));
    }


//    Choose best 16 from 256 as candidates


	// create new controller for assessing migration goodness
	C2 = new TFuzzyController();

	// add input and output variables
  	C2->clear_input_variables();
	C2->add_input_variable(new TVariable("LocalLoad",      "", 00.0,   100.0));
	C2->add_input_variable(new TVariable("RemoteLoad",     "", 00.0,   100.0));
	C2->output_variable =  new TVariable("LocalRepulsion", "", 00.0,   100.0);

	// add fuzzysets to the input and output variables
    centre  = 60;   // input 1
  	C2->input_variables[0]->clear_fuzzysets();
    C2->input_variables[0]->add_fuzzyset(new TFuzzySet(C2->input_variables[0], "Low", 	    S_CURVE  , DOWN , 0.00*centre, -0.0,        0.50*centre,         -0.0,                1.00*centre));
    C2->input_variables[0]->add_fuzzyset(new TFuzzySet(C2->input_variables[0], "Medium", 	PI_CURVE , UP   , 0.00*centre, 0.50*centre, 1.00*centre,         (100.0-0.50*centre), 100.0      ));
    C2->input_variables[0]->add_fuzzyset(new TFuzzySet(C2->input_variables[0], "High",   	S_CURVE  , UP   , 1.00*centre, -0.0,        (100.0-0.50*centre), -0.0,                100.0      ));
    centre  = 40;   // input 2
  	C2->input_variables[1]->clear_fuzzysets();
    C2->input_variables[1]->add_fuzzyset(new TFuzzySet(C2->input_variables[1], "Low", 	    S_CURVE  , DOWN , 0.00*centre, -0.0,        0.50*centre,         -0.0,                1.00*centre));
    C2->input_variables[1]->add_fuzzyset(new TFuzzySet(C2->input_variables[1], "Medium", 	PI_CURVE , UP   , 0.00*centre, 0.50*centre, 1.00*centre,         (100.0-0.50*centre), 100.0      ));
    C2->input_variables[1]->add_fuzzyset(new TFuzzySet(C2->input_variables[1], "High",   	S_CURVE  , UP   , 1.00*centre, -0.0,        (100.0-0.50*centre), -0.0,                100.0      ));
    centre  = 50;   // output
  	C2->output_variable->clear_fuzzysets();
    C2->output_variable->add_fuzzyset(new TFuzzySet(C2->output_variable, "Low", 	S_CURVE  , DOWN , 0.00*centre, -0.0,        0.50*centre,         -0.0,                1.00*centre));
    C2->output_variable->add_fuzzyset(new TFuzzySet(C2->output_variable, "Medium", 	PI_CURVE , UP   , 0.00*centre, 0.50*centre, 1.00*centre,         (100.0-0.50*centre), 100.0      ));
    C2->output_variable->add_fuzzyset(new TFuzzySet(C2->output_variable, "High",   	S_CURVE  , UP   , 1.00*centre, -0.0,        (100.0-0.50*centre), -0.0,                100.0      ));


	// create empty rules    (conditional, alpha,  weight)
    C2->clear_rules();
    C2->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C2->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C2->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C2->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C2->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C2->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C2->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C2->add_rule(new TFuzzyRule(true,         0.00,   1.0));
    C2->add_rule(new TFuzzyRule(true,         0.00,   1.0));


	// setup rules                local_load         remote_load        local_repulsion
    //----------------------------------------------------------------------------------
    //
    if (C2->rules[0] != NULL)
    {
    C2->rules[0]->predicate->clear_premises();
    C2->rules[0]->predicate->clear_operators();
    C2->rules[0]->predicate->add_premise(new TPremise(C2->input_variables[0]->fuzzysets[0]));
    C2->rules[0]->predicate->add_operator(0);
    C2->rules[0]->predicate->add_premise(new TPremise(C2->input_variables[1]->fuzzysets[0]));
    C2->rules[0]->consequent->set_premise(new TPremise(C2->output_variable->fuzzysets[0]));
    }
    if (C2->rules[1] != NULL)
    {
    C2->rules[1]->predicate->clear_premises();
    C2->rules[1]->predicate->clear_operators();
    C2->rules[1]->predicate->add_premise(new TPremise(C2->input_variables[0]->fuzzysets[0]));
    C2->rules[1]->predicate->add_operator(0);
    C2->rules[1]->predicate->add_premise(new TPremise(C2->input_variables[1]->fuzzysets[1]));
    C2->rules[1]->consequent->set_premise(new TPremise(C2->output_variable->fuzzysets[0]));
    }
    if (C2->rules[2] != NULL)
    {
    C2->rules[2]->predicate->clear_premises();
    C2->rules[2]->predicate->clear_operators();
    C2->rules[2]->predicate->add_premise(new TPremise(C2->input_variables[0]->fuzzysets[0]));
    C2->rules[2]->predicate->add_operator(0);
    C2->rules[2]->predicate->add_premise(new TPremise(C2->input_variables[1]->fuzzysets[2]));
    C2->rules[2]->consequent->set_premise(new TPremise(C2->output_variable->fuzzysets[0]));
    }
    if (C2->rules[3] != NULL)
    {
    C2->rules[3]->predicate->clear_premises();
    C2->rules[3]->predicate->clear_operators();
    C2->rules[3]->predicate->add_premise(new TPremise(C2->input_variables[0]->fuzzysets[1]));
    C2->rules[3]->predicate->add_operator(0);
    C2->rules[3]->predicate->add_premise(new TPremise(C2->input_variables[1]->fuzzysets[0]));
    C2->rules[3]->consequent->set_premise(new TPremise(C2->output_variable->fuzzysets[1]));
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -