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

📄 migrationfc.cpp

📁 人工智能中模糊逻辑算法 FuzzyLib 2.0 is a comprehensive C++ Fuzzy Logic library for constructing fuzzy logic sy
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    if (C2->rules[4] != NULL)
    {
    C2->rules[4]->predicate->clear_premises();
    C2->rules[4]->predicate->clear_operators();
    C2->rules[4]->predicate->add_premise(new TPremise(C2->input_variables[0]->fuzzysets[1]));
    C2->rules[4]->predicate->add_operator(0);
    C2->rules[4]->predicate->add_premise(new TPremise(C2->input_variables[1]->fuzzysets[1]));
    C2->rules[4]->consequent->set_premise(new TPremise(C2->output_variable->fuzzysets[0]));
    }
    if (C2->rules[5] != NULL)
    {
    C2->rules[5]->predicate->clear_premises();
    C2->rules[5]->predicate->clear_operators();
    C2->rules[5]->predicate->add_premise(new TPremise(C2->input_variables[0]->fuzzysets[1]));
    C2->rules[5]->predicate->add_operator(0);
    C2->rules[5]->predicate->add_premise(new TPremise(C2->input_variables[1]->fuzzysets[2]));
    C2->rules[5]->consequent->set_premise(new TPremise(C2->output_variable->fuzzysets[0]));
    }
    if (C2->rules[6] != NULL)
    {
    C2->rules[6]->predicate->clear_premises();
    C2->rules[6]->predicate->clear_operators();
    C2->rules[6]->predicate->add_premise(new TPremise(C2->input_variables[0]->fuzzysets[2]));
    C2->rules[6]->predicate->add_operator(0);
    C2->rules[6]->predicate->add_premise(new TPremise(C2->input_variables[1]->fuzzysets[0]));
    C2->rules[6]->consequent->set_premise(new TPremise(C2->output_variable->fuzzysets[2]));
    }
    if (C2->rules[7] != NULL)
    {
    C2->rules[7]->predicate->clear_premises();
    C2->rules[7]->predicate->clear_operators();
    C2->rules[7]->predicate->add_premise(new TPremise(C2->input_variables[0]->fuzzysets[2]));
    C2->rules[7]->predicate->add_operator(0);
    C2->rules[7]->predicate->add_premise(new TPremise(C2->input_variables[1]->fuzzysets[1]));
    C2->rules[7]->consequent->set_premise(new TPremise(C2->output_variable->fuzzysets[1]));
    }
    if (C2->rules[8] != NULL)
    {
    C2->rules[8]->predicate->clear_premises();
    C2->rules[8]->predicate->clear_operators();
    C2->rules[8]->predicate->add_premise(new TPremise(C2->input_variables[0]->fuzzysets[2]));
    C2->rules[8]->predicate->add_operator(0);
    C2->rules[8]->predicate->add_premise(new TPremise(C2->input_variables[1]->fuzzysets[2]));
    C2->rules[8]->consequent->set_premise(new TPremise(C2->output_variable->fuzzysets[0]));
    }


//    Apply on the 16 candidates

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

	// add input and output variables
  	C3->clear_input_variables();
	C3->add_input_variable(C1->output_variable);
	C3->add_input_variable(C2->output_variable);
	C3->output_variable =  new TVariable("Migration",        "", 00.0,   100.0);

	// add fuzzysets to the output variable
    centre  = 50;   // output
  	C3->output_variable->clear_fuzzysets();
    C3->output_variable->add_fuzzyset(new TFuzzySet(C3->output_variable, "VeryLow", S_CURVE  , DOWN , 0.00*centre,          -0.0,                 0.25*centre,          -0.0,                 0.50*centre         ));
    C3->output_variable->add_fuzzyset(new TFuzzySet(C3->output_variable, "Low", 	PI_CURVE , UP   , 0.00*centre,          0.25*centre,          0.50*centre,          0.75*centre,          1.00*centre         ));
    C3->output_variable->add_fuzzyset(new TFuzzySet(C3->output_variable, "Medium", 	PI_CURVE , UP   , 0.50*centre,          0.75*centre,          1.00*centre,          (100.00-0.70*(100-centre)), (100.00-0.50*(100-centre))));
    C3->output_variable->add_fuzzyset(new TFuzzySet(C3->output_variable, "High", 	PI_CURVE , UP   , 1.00*centre,          (100.00-0.75*(100-centre)), (100.00-0.50*(100-centre)), (100.00-0.25*(100-centre)), 100.00  ));
    C3->output_variable->add_fuzzyset(new TFuzzySet(C3->output_variable, "VeryHigh",S_CURVE  , UP   , (100.00-0.50*(100-centre)), -0.0,                 (100.00-0.25*(100-centre)), -0.0,                 100.00        ));

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


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

    if (C3->rules[3] != NULL)
    {
    C3->rules[3]->predicate->clear_premises();
    C3->rules[3]->predicate->clear_operators();
    C3->rules[3]->predicate->add_premise(new TPremise(C3->input_variables[0]->fuzzysets[1]));
    C3->rules[3]->predicate->add_operator(0);
    C3->rules[3]->predicate->add_premise(new TPremise(C3->input_variables[1]->fuzzysets[0]));
    C3->rules[3]->consequent->set_premise(new TPremise(C3->output_variable->fuzzysets[1]));
    }
    if (C3->rules[4] != NULL)
    {
    C3->rules[4]->predicate->clear_premises();
    C3->rules[4]->predicate->clear_operators();
    C3->rules[4]->predicate->add_premise(new TPremise(C3->input_variables[0]->fuzzysets[1]));
    C3->rules[4]->predicate->add_operator(0);
    C3->rules[4]->predicate->add_premise(new TPremise(C3->input_variables[1]->fuzzysets[1]));
    C3->rules[4]->consequent->set_premise(new TPremise(C3->output_variable->fuzzysets[2]));
    }
    if (C3->rules[5] != NULL)
    {
    C3->rules[5]->predicate->clear_premises();
    C3->rules[5]->predicate->clear_operators();
    C3->rules[5]->predicate->add_premise(new TPremise(C3->input_variables[0]->fuzzysets[1]));
    C3->rules[5]->predicate->add_operator(0);
    C3->rules[5]->predicate->add_premise(new TPremise(C3->input_variables[1]->fuzzysets[2]));
    C3->rules[5]->consequent->set_premise(new TPremise(C3->output_variable->fuzzysets[3]));
    }

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

    for (int i=0; i<MAX_DEMANDING_NODES; i++)
    {
        remote_attractionsets[i] = NULL;
    }
    for (int i=0; i<MAX_CANDIDATE_NODES; i++)
    {
        local_repulsionsets[i] = NULL;
    }
    for (int i=0; i<MAX_CANDIDATE_NODES; i++)
    {
        migrationsets[i] = NULL;
    }
}
////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////
TMigrationFC::~TMigrationFC()
{
    if (C1 != NULL)	delete	C1;    C1 = NULL;
    if (C2 != NULL)	delete	C2;    C2 = NULL;
    if (C3 != NULL)	delete	C3;    C3 = NULL;
}
////////////////////////////////////////////////////////////////////////////////







// fill demanding_nodes_ids[MAX_DEMANDING_NODES]
void TMigrationFC::IdentifyDemandingNodes()  // using Fragment->DemandHistoryTable[i]
{
// temporary
    for (int i=0; i<MAX_DEMANDING_NODES; i++)
    {
        demanding_nodes_ids[i] = i;
    }
}




// average info from fragment's statistics in last T (+ forcast)
void TMigrationFC::GetLocalDemand() // using Fragment->DemandHistoryTable[i]
{
// temporary
    local_demand = random(100);
}


// for each demanding node in demanding_nodes_ids[MAX_DEMANDING_NODES]
// fill remote_loads[index]
void TMigrationFC::GetRemoteDemand(int index)  // using Fragment->DemandHistoryTable[i]

⌨️ 快捷键说明

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