📄 migrationfc.cpp
字号:
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 + -