提示:我的rs.lib rs.dll rs.h 是在 VS2005 专业版中创建的,下面是实例也是在VS2005 MFC 中做的,其它环境可能会有问题,由于时间有限,我还没有在其它环境中测试,所以建议用 VS2005 来做。
Step1:建一个MFC基于对话框的工程rsTest,并在rsTestDlg.cpp中包含rs.h和lunwen.h,把 rs.lib 和 rs.dll 和 rs.h 拷贝到工程中;
Step2:添加 lunwen.h 头文件,内容如下:
#ifndef lunwen_H
#define lunwen_H
//#include"Set.h"
//#include"Element.h"
//#include"DecisionTable.h"
//#include"File.h"
//#include<time.h>
//#include<windows.h>
#include "../rs/rs.h"
//论文算法3.1 属性约简的数据分析方法(求出一个约简)
DecisionTable A_3_1(DecisionTable DT);
//论文算法3.5基于特征选择的属性约简方法(求出一个约简)
DecisionTable A_3_5(DecisionTable DT);
//论文算法4.1基于松散依赖度的属性约简方法(求出一个约简)
DecisionTable A_4_1(DecisionTable DT);
//输出约简的兼容决策集
DecisionTable BuildCDS(DecisionTable DT);
#endif
Step3:添加 lunwen.cpp 源文件:
#include "stdafx.h"
#include"lunwen.h"
//论文算法3.1 属性约简的数据分析方法
DecisionTable A_3_1(DecisionTable DT)
{
DecisionTable RED = DT;
vector<char> C = DT.GetConditionSet();
vector<char>::iterator it = C.begin();
Set pos = DT.POS(); //计算决策表D的C正区域
for( ; it < C.end(); it++)
{
if(DT.RemoveConditionAttribute(*it).POS() == pos)
{
RED = DT;
}
else
{
DT = RED;
}
}
return RED;
}
//论文算法3.5基于特征选择的属性约简方法
DecisionTable A_3_5(DecisionTable DT)
{
DecisionTable RED = DT;
DecisionTable temp;
double r = DT.RelyDegreeOfDToC();
while(RED.RelyDegreeOfDToC() == r)
{
double Sig = 1.0;
int index = 0;
temp = RED;
vector<char> condition = RED.GetConditionSet();
vector<double> SigOfAllAttribute;
for(unsigned int i = 0; i < condition.size(); i++)
{
if(RED.SigOfAttribute(condition[i]) < Sig)
{
Sig = RED.SigOfAttribute(condition[i]);
index = i;
}
}
if(RED.RemoveConditionAttribute(condition[index]).RelyDegreeOfDToC() == r)
{
continue;
}
else
{
RED = temp;
break;
}
}
return RED;
}
//论文算法4.1基于松散依赖度的属性约简方法(求出一个约简)
DecisionTable A_4_1(DecisionTable DT)
{
DecisionTable RED = DT;
DecisionTable temp;
double lr = DT.LooseRelyDegreeOfDToC();
while(RED.LooseRelyDegreeOfDToC() == lr)
{
double lr1 = 1.0;
int index = 0;
temp = RED;
vector<char> condition = RED.GetConditionSet();
for(unsigned int i = 0; i < condition.size(); i++)
{
if(RED.LooseRelyDegreeOfDToAttribute(condition[i]) < lr1)
{
lr1 = RED.LooseRelyDegreeOfDToAttribute(condition[i]);
index = i;
}
}
if(RED.RemoveConditionAttribute(condition[index]).LooseRelyDegreeOfDToC() == lr)
{
continue;
}
else
{
RED = temp;
break;
}
}
return RED;
}
//输出约简的兼容决策集
DecisionTable BuildCDS(DecisionTable DT)
{
DecisionTable CDS = DT ;
CDS = CDS.Unique();
vector<Element> eVec = CDS.GetDT();
vector<Element>::iterator it1 = eVec.begin();
for( ; it1 < eVec.end(); it1++)
{
vector<Element>::iterator it2 = eVec.begin();
for( ; it2 < eVec.end(); it2++)
{
if((*it1).ConditionEqual(*it2))
{
if(DT.CountOfDecisionValue((*it1).GetDecision()) <
DT.CountOfDecisionValue((*it2).GetDecision()))
{
CDS.RemoveElement((*it1).GetU());
}
}
}
}
return CDS;
}
Step4:在rsTestDlg.cpp 的 OnInitDialog() 中添加如下代码(你也可以找个合适的地方添加):
// TODO: 在此添加额外的初始化代码
DecisionTable DT("..//T4-6.txt");
//DT.Print();
//cout<<endl;
SaveDTToFile(DT, "..//DT.txt");
DecisionTable RED = A_4_1 ( DT );
//RED.Print();
//cout<<endl;
SaveDTToFile(RED, "..//RED.txt");
DecisionTable Rule = BuildCDS ( RED );
//Rule.Print();
SaveDTToFile(Rule, "..//CDS.txt");
Step5: 在 rsTest 的项目属性中的链接、输入中添加 rs.lib
Step6:编译链接工程,运行,产生 RED.txt 和 CDS.txt 文件就是结果。
祝你好运!就写到这吧!有问题可与我联系!