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

📄 liesamplerecognise.cpp

📁 某个实验事编写粗糙集智能信息处理的程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
							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 + -