📄 liesamplerecognise.cpp
字号:
if(atof(trimstring) <= atof(pStringTable[i][k]))
break;
}//end if
/* else if(tempstring[0] == '{')
{
int m = 0;
trimstring = tempstring;
trimstring.Delete(0,1);
pos = trimstring.Find(',');
while(pos != -1)
{
compstring = trimstring.Left(pos);
trimstring.Delete(0,pos+1);
if(strcmp(compstring,pStringTable[i][k]) == 0)
{
m =1;
break;
}//end if
pos = trimstring.Find(',');
}//end while
if(m == 0)
{
trimstring.Remove('}');
if(strcmp(trimstring,pStringTable[i][k]) != 0)
break;
}//end if
}//end if
*/
else if(strcmp(pDataType[k],"String")==0 )
{//属性类型为字符串型
if(strcmp(tempstring,pStringTable[i][k])==0)
continue;
else break;
}
else
if(atoi(pBlockTable[j][k]) != atoi(pStringTable[i][k]))
break;
}//end for
if(k == iAttNum) //如果块匹配
{//删除对应封锁规则
trimstring = pBlockTable[j][iAttNum];
trimstring.Delete(0,5);
if(temp[atoi(trimstring)] == 1)
{
temp[atoi(trimstring)] = 0;
n--;
}//end if
}//end if
}//end for(j)
}//end if(n != 0 && bBlock)
if(n == 0)
{//无规则匹配
strcpy(pRecogniseResultTable[i][0],"未识别");
strcpy(pRecogniseResultTable[i][1],"-");
if(bTest)
iDentifyNone++;//未识别数加一
continue;
}//end if
if(n == 1)
{//规则匹配数为1
for(j = 0;j < iRuleNum;j++)
{
if(temp[j] == 1)
break;
}//end for
if(bTest)
{
if(strcmp(pRuleTable[j][iAttNum],pStringTable[i][iAttNum]) == 0)
iDentifyRight++;//决策相等时,决策正确数加一
else
iDentifyError++;//决策不等时,决策错误数加一
}
strcpy(pRecogniseResultTable[i][0],pRuleTable[j][iAttNum]);//统计识别值
_itoa(temp1+1,pRecogniseResultTable[i][1],10);
//在pRecogniseResultTable[i][1]中以十进制字符串形式存储temp1+1,即规则序号
continue;
}//end if
//以下处理有多条规则匹配时
temp1 = -1;
bcollision=false;
if(bTest)
for(j = 0;j < iRuleNum;j++)
{//统计冲突样例数目
for(int j1 = 0;j1 < iRuleNum;j1++)
if(j1!=j && temp[j1]==1 && temp[j]==1)
if(atoi(pRuleTable[j][iAttNum])!=atoi(pRuleTable[j1][iAttNum]))
{//决策不等,冲突
bcollision=true;
break;
}
if(bcollision)
{
iTestConflict++;//冲突数目加一
break;
}
}
for(j = 0;j < iRuleNum;j++)
{//多数优先策略
if(temp[j] == 1)
{
if(temp1 == -1)
{
temp1 = j;
reliability = (float)atof(pRuleTable[j][iAttNum+1]);
coveragenum = atoi(pRuleTable[j][iAttNum+2]);
totalnum = atoi(pRuleTable[j][iAttNum+3]);
strcpy(d,pRuleTable[j][iAttNum]);
}//end if
else
if(atof(d)==atof(pRuleTable[j][iAttNum])) //一致规则
{//一致的就选择覆盖度最大的
if(coveragenum< atoi(pRuleTable[j][iAttNum+2]))
{
temp1 = j;
reliability = (float)atof(pRuleTable[j][iAttNum+1]);
coveragenum = atoi(pRuleTable[j][iAttNum+2]);
totalnum = atoi(pRuleTable[j][iAttNum+3]);
strcpy(d,pRuleTable[j][iAttNum]);
}//end if
}
else
{
if(reliability == atof(pRuleTable[j][iAttNum+1]))
{
if(totalnum < atoi(pRuleTable[j][iAttNum+3]))
{
temp1 = j;
reliability = (float)atof(pRuleTable[j][iAttNum+1]);
coveragenum = atoi(pRuleTable[j][iAttNum+2]);
totalnum = atoi(pRuleTable[j][iAttNum+3]);
strcpy(d,pRuleTable[j][iAttNum]);
}//end if
}//end if
else
{//信任度不等
if(totalnum == atoi(pRuleTable[j][iAttNum+3]))
{//频度一样时选取可信度较大的规则
if(reliability < atof(pRuleTable[j][iAttNum+1]))
{
temp1 = j;
reliability = (float)atof(pRuleTable[j][iAttNum+1]);
coveragenum = atoi(pRuleTable[j][iAttNum+2]);
totalnum = atoi(pRuleTable[j][iAttNum+3]);
strcpy(d,pRuleTable[j][iAttNum]);
}//end if
}//end if
else
{//频度不等
if(totalnum < atoi(pRuleTable[j][iAttNum+3]))
{
if(reliability < atof(pRuleTable[j][iAttNum+1]))
{
temp1 = j;
reliability = (float)atof(pRuleTable[j][iAttNum+1]);
coveragenum = atoi(pRuleTable[j][iAttNum+2]);
totalnum = atoi(pRuleTable[j][iAttNum+3]);
strcpy(d,pRuleTable[j][iAttNum]);
}//end if
else
{
// if(coveragenum/(float)(totalnum*totalnum) >
// atoi(pRuleTable[j][iAttNum+2])/(float)(atoi(pRuleTable[j][iAttNum+3])*atoi(pRuleTable[j][iAttNum+3])))
if((float)(coveragenum*coveragenum)/totalnum <
(float)(atoi(pRuleTable[j][iAttNum+2])*atoi(pRuleTable[j][iAttNum+2]))/atoi(pRuleTable[j][iAttNum+3]))
{
temp1 = j;
reliability = (float)atof(pRuleTable[j][iAttNum+1]);
coveragenum = atoi(pRuleTable[j][iAttNum+2]);
totalnum = atoi(pRuleTable[j][iAttNum+3]);
strcpy(d,pRuleTable[j][iAttNum]);
}//end if
}//end else
}//end if
else
{
if(reliability < atof(pRuleTable[j][iAttNum+1]))
{
if((float)(coveragenum*coveragenum)/totalnum <
(float)(atoi(pRuleTable[j][iAttNum+2])*atoi(pRuleTable[j][iAttNum+2]))/atoi(pRuleTable[j][iAttNum+3]))
{
temp1 = j;
reliability = (float)atof(pRuleTable[j][iAttNum+1]);
coveragenum = atoi(pRuleTable[j][iAttNum+2]);
totalnum = atoi(pRuleTable[j][iAttNum+3]);
strcpy(d,pRuleTable[j][iAttNum]);
}//end if
}//end if
}//end else
}//end else
}//end else
}//end else
}//end if
}//end for
if(bTest)
{
if(strcmp(d,pStringTable[i][iAttNum]) == 0)
{
if(bcollision)
iTestRight++;
iDentifyRight++;
}//end if
else
{
if(bcollision)
iTestError++;
iDentifyError++;
}//end else
}
strcpy(pRecogniseResultTable[i][0],d);
_itoa(temp1+1,pRecogniseResultTable[i][1],10);
}//end for
delete[] temp;
delete[] d;
}
void CLieSampleRecognise::SaveRecogniseResult(LPCTSTR lpszPathName)
{
FILE* fp;
fp = fopen(lpszPathName,"w");
fprintf(fp,"Style:%s\n","result");
if(bTest)
fprintf(fp,"Stage:0\n");
else
fprintf(fp,"Stage:1\n");
fprintf(fp,"Condition attributes number:%d\n",iAttNum);
fprintf(fp,"Tests number:%d\n",iTestNum);
if(bTest)
{
for(int i = 0;i < iAttNum+1;i++)
fprintf(fp,"%s ",pAttName[i]);
bTest=1;
}
else
{
for(int i = 0;i < iAttNum;i++)
fprintf(fp,"%s ",pAttName[i]);
}
fprintf(fp,"识别值 ");
fprintf(fp,"所用规则\n");
for(int i = 0;i < iTestNum;i++)
{
TRACE("%d",i);
if(bTest)
{
for(int j = 0;j < iAttNum+1;j++)
fprintf(fp,"%s ",pStringTable[i][j]);
}
else
{
for(int j = 0;j < iAttNum;j++)
fprintf(fp,"%s ",pStringTable[i][j]);
}
fprintf(fp,"%s ",pRecogniseResultTable[i][0]);
fprintf(fp,"%s\n",pRecogniseResultTable[i][1]);
}
if(bTest)
{
fprintf(fp,"正确识别数:%d\n",iDentifyRight);
fprintf(fp,"错误识别数:%d\n",iDentifyError);
fprintf(fp,"未识别 数:%d\n",iDentifyNone);
fprintf(fp,"冲突样本数:%d\n",iTestConflict);
fprintf(fp,"决策正确数:%d\n",iTestRight);
fprintf(fp,"决策错误数:%d\n",iTestError);
}
fclose(fp);
}
void CLieSampleRecognise::ChangeString()
{//将pStringTable中的值按断点的方式表达
TRACE(" changestring \n");
int i,j;
struct CutRecord* pHead;
for(i = 0;i < iRecordNum;i++)
{
for(j = 0;j < iAttNum;j++)
{
if(strcmp(pStringTable[i][j],"-") == 0)
continue;
pHead = struCutRecord;
while(pHead != NULL)
{
if(pHead->iColumn == j)
break;
pHead = pHead->p;
}//end while
if(pHead != NULL)
strcpy(pStringTable[i][j],pHead->cpCut[pIntTable[i][j]]);
}//end for
}//end for
}
BOOL CLieSampleRecognise::SetAttName(FILE* fp, int count)
{//没有删除的属性
TRACE("set att name\n");
int i;
if(pAttName == NULL)
{
try
{
pAttName = new char*[count];
}
catch(CMemoryException* e)
{
TRACE("memeory error 1\n");
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of the memory!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
for(i=0;i < count;i++)
{
try
{
pAttName[i]=new char[MAX];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of the memory!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
}//end for
}//end if
for(i=0;i < count;i++)
fscanf(fp,"%s",pAttName[i]);
return TRUE;
}
BOOL CLieSampleRecognise::SetBlockTable(FILE *fp, int column, int row)
{//没有删除的属性
TRACE("SetBlockTable\n");
int i,j,k=0;
if(pBlockTable == NULL)
{
try
{
pBlockTable = new char**[row];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory9!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
for(i = 0;i < row;i++)
{
try
{
pBlockTable[i] = new char*[column];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory10!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
for(j = 0;j < column;j++)
{
try
{
pBlockTable[i][j] = new char[MAX];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory11!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
strcpy(pBlockTable[i][j]," ");
}//end for
}//end for
}//end if
for(i = 0;i < row;i++)
for(j = 0;j < column;j++)
fscanf(fp,"%s",pBlockTable[i][j]);
return TRUE;
}
BOOL CLieSampleRecognise::SetDataType(FILE *fp, int count)
{
TRACE("SetDatType\n");
int i;
if(pDataType == NULL)
{
try
{
pDataType = new char*[count];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of the memory!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
for(i = 0;i < count;i++)
{
try
{
pDataType[i]=new char[MAX];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of the memory!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
}//end for
}//end if
for(i = 0;i < count;i++)
fscanf(fp,"%s",pDataType[i]);
return TRUE;
}
BOOL CLieSampleRecognise::SetRuleTable(FILE *fp, int column, int row)
{
TRACE("SetRuleTable\n");
int i,j,k=0;
if(pRuleTable == NULL)
{
try
{
pRuleTable = new char**[row];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory6!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
for(i = 0;i < row;i++)
{
try
{
pRuleTable[i] = new char*[column];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("7!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
for(j = 0;j < column;j++)
{
try
{
pRuleTable[i][j] = new char[MAX];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory7!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
strcpy(pRuleTable[i][j]," ");
}//end for
}//end for
}//end if
///先读列再读行
for(i = 0;i < row;i++)
for(j = 0;j < column;j++)
fscanf(fp,"%s",pRuleTable[i][j]);
// ofstream outout;
return TRUE;
}
bool CLieSampleRecognise::IsRuleAttAllNull(int row)
{
for(int i=0;i<iAttNum;i++)
if(stricmp(pRuleTable[row][i],"-")!=0)
return false;
return true;
}
bool CLieSampleRecognise::IsTestAttAllNull(int row)
{
int k=0;
for(int i=0;i<iAttNum;i++)
{
if(atbcount>k)
if(i==atb[k])
{
k++;
continue;
}
if(stricmp(pStringTable[row][i],"-")!=0)
return false;
}
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -