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

📄 势函数.cpp

📁 典型的势函数编写算法,通过IO输入输出文件实现函数.
💻 CPP
字号:
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<iostream.h>
#include<math.h>
#define n 6
#define m 30
#define d 3
struct sample {
	int x[d];
	int cl;
};
struct func {
	int symbol;
	int index;
};
struct func ftbl[m];
int k,r=-1,tag=1,i,j;
double g=0,temp;
struct sample s[10];
//={{1,2,5,1},{1,1,2,1},{3,3,6,1},{5,6,10,2},{7,6,11,2},{8,7,12,2}};
const char FILE_NAME[] = "io.txt";
void shihanshu()
{
	while(tag==1)
	{	tag=0;
		for(k=0;k<n;k++)
		{
			if(r==-1){r++;
					ftbl[r].symbol=1;
					ftbl[r].index=0;
					continue;
			}
			else{g=0;
				for(i=0;i<=r;i++)
				{
					temp=0;
					for(j=0;j<d;j++)
						temp+=(s[k].x[j]-s[ftbl[i].index].x[j])*(s[k].x[j]-s[ftbl[i].index].x[j]);
					g+=ftbl[i].symbol*exp(-temp);
				}
				if((g>0 && s[k].cl==1)||(g<0&&s[k].cl==2))continue;
				else{
					r++;ftbl[r].index=k;tag=1;
					if(g>0 && s[k].cl==2)
						ftbl[r].symbol=-1;
					else if(g<0&&s[k].cl==1)
						ftbl[r].symbol=1;
				}
			}
		}
	}
	cout<<"势函数:\n";
	system("color 2");
	for(i=0;i<=r;i++)
	{
	  if(ftbl[i].symbol==1)
		if(i==0)cout<<"exp{-[x1";
		else cout<<"+exp{-[x1";
	  else
		  cout<<"-exp{-[x1";

	  if(s[ftbl[i].index].x[0]>0)
		  cout<<"-"<<s[ftbl[i].index].x[0]<<")^2+(x2";
	  else if(s[ftbl[i].index].x[0]<0)
		  cout<<"+"<<-s[ftbl[i].index].x[0]<<")^2+(x2";
	  else cout<<")^2+(x2";

	  if(s[ftbl[i].index].x[1]>0)
		  cout<<"-"<<s[ftbl[i].index].x[1]<<")^2+(x3";
	  else if(s[ftbl[i].index].x[1]<0)
		  cout<<"+"<<-s[ftbl[i].index].x[0]<<")^2+(x3";
	  else cout<<")^2+(x2";

	  if(s[ftbl[i].index].x[2]>0)
		  cout<<"-"<<s[ftbl[i].index].x[2]<<")^2]}";
	  else if(s[ftbl[i].index].x[2]<0)
		  cout<<"+"<<-s[ftbl[i].index].x[0]<<")^2]}";
	  else cout<<")^2]}";
	}
	cout<<"\n";
}

void main()
{
	int count=0;
	FILE *in_file;
	int ch,ch2;
	int curr;
	in_file=fopen(FILE_NAME,"rb");
	if(in_file==NULL){
		std::cerr<<"Can not open "<<FILE_NAME<<"\n";
		exit(0);
	}
	i=0;
	while(i<n){
		for(int iii=0;iii<4;++iii){
			ch=fgetc(in_file);
			ch2=fgetc(in_file);
			if(ch2==' ') curr=ch-'0';
			else curr=(ch-'0')*10+ch2-'0';
			cout<<curr<<" ";
			if((iii+1)%4==0) cout<<"\n";
			if(iii==3) s[i].cl=curr;
			else s[i].x[iii]=curr;
		}
		++i;
		//if(ch==EOF)
			//break;
		++count;
	}
	cout<<"样本个数:from "<<FILE_NAME<<" is "<<count<<"\n";
	fclose(in_file);
	cout<<"样本输出:\n";
	for(i=0;i<n;++i){
		for(j=0;j<4;++j)
		{
			if(j==3)
				cout<<s[i].cl;
			else cout<<s[i].x[j];
			cout<<" ";
			if((j+1)%4==0) cout<<"\n";
		}
	}
	shihanshu();
	return;
}

⌨️ 快捷键说明

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