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

📄 formmain.cs

📁 用C#开发的录井油气识别专家系统
💻 CS
📖 第 1 页 / 共 5 页
字号:
				return;
			switch(GAThread.ThreadState)
			{
				case System.ThreadState.Unstarted:
			
					break;
				case ThreadState.Running: 
				case ThreadState.WaitSleepJoin:
				case ThreadState.SuspendRequested:
				case ThreadState.Suspended:
				case ThreadState.AbortRequested:
					GAThread.Abort();
					break;
					
				case ThreadState.Stopped:
					break;
				
			}
			*/
			
		}

		private void menuGA_Popup(object sender, System.EventArgs e)
		{


			bool bEnable=true;
			if(bEnable)
				if(TemplateSet==null)
					bEnable=false;

			if(bEnable)
				if(TemplateSet.TemplateTable==null)
					bEnable=false;

			if(bEnable)
				if(this.CriSet==null)
					bEnable=false;

			if(bEnable)
				if(CriSet.SampleTable==null)
					bEnable=false;

			if(bEnable)
			{
				BindingManagerBase bm = BindingContext[cridg.DataSource, cridg.DataMember];
				int i=0;
				for(i=0;i<bm.Count;i++)
					if(cridg.IsSelected(i))
						break;
				if(i>=bm.Count)
					bEnable=false;
			}

            
			menuGAStart.Enabled=bEnable;





		
			menuGASuspend.Enabled=false;
			menuGAResume.Enabled=false;
			menuGAAbort.Enabled=false;

			menuAbortCurrentSample.Enabled=false;
			menuAbortAllSamples	.Enabled=false;

			return;



			//the following code are for thread means

			if(GAThread==null)
			{
				GAThread=new Thread(new ThreadStart(LaunchGAAll));
				GAThread.Name="专家模板遗传算法";
			}

			if(GAThread.ThreadState==System.Threading.ThreadState.Aborted ||
				GAThread.ThreadState==System.Threading.ThreadState.Stopped) 
			{
				GAThread=new Thread(new ThreadStart(LaunchGAAll));
				GAThread.Name="专家模板遗传算法";
			}




			menuGAStart.Enabled=(GAThread.ThreadState==System.Threading.ThreadState.Unstarted);
			menuGASuspend.Enabled=(GAThread.ThreadState==System.Threading.ThreadState.Running);
			menuGAResume.Enabled=(GAThread.ThreadState==System.Threading.ThreadState.Suspended);
			menuGAAbort.Enabled=(GAThread.ThreadState==System.Threading.ThreadState.Running 
				||GAThread.ThreadState==System.Threading.ThreadState.WaitSleepJoin);

			menuAbortCurrentSample.Enabled=GAThread.IsAlive;
			menuAbortAllSamples	.Enabled=GAThread.IsAlive;


		}

		private void menuGAStart_Click(object sender, System.EventArgs e)
		{
			initGA();
			//NomeS.nGenerations=20;
			if(NomeS.ShowDialog(this)!= DialogResult.OK)
				return;
			
			TemplateMapping.fieldwidth=NomeS.nGAWidth;
			currTemplate=new TemplateMapping();


			
			BindingManagerBase bm = BindingContext[cridg.DataSource, cridg.DataMember];
			for(int i=0;i<bm.Count;i++)
			{
				if(!cridg.IsSelected(i))
					continue;

				cridg.CurrentCell = new DataGridCell(i,1);
				DataRowView drv = (DataRowView) bm.Current;
				int idData=Convert.ToInt16(drv["序号"]);
				currTemplate.indTarget.Add(idData);

			}

			GAProgress.progressBar1.Maximum=NomeS.nGenerations*currTemplate.indTarget.Count;
			GAProgress.progressBar1.Step=1;
		
			



			//*****************
			Update();


			LaunchGAAll();
			//GAThread.Start();
		
		}

		private void menuGASuspend_Click(object sender, System.EventArgs e)
		{
			GAThread.Suspend();
		
		}

		private void menuGAResume_Click(object sender, System.EventArgs e)
		{
			GAThread.Resume();
		
		}

		private void menuAbortCurrentSample_Click(object sender, System.EventArgs e)
		{
			menuAbortCurrentSample.Checked^=true;
		
		}

		private void menuAbortAllSamples_Click(object sender, System.EventArgs e)
		{
			menuAbortAllSamples.Checked^=true;
		
		}

		
		private void menuGAAbort_Click(object sender, System.EventArgs e)
		{
			GAThread.Abort();
		
		}

		void ShowTable(DataTable table)
		{
			TabPage page=null;
			TabControl control=null;
			myGridCtrl grid=null;
			
			if(table ==ExamTable)
				grid=examdg;

			else if(table==ParamTable || table==SampleTable)
				grid=cridg;
			else if(table==StatisResultTable)
				grid=resultdg;
		
			page=grid.Parent as TabPage;
			control=page.Parent as TabControl;
			control.SelectedTab=page;
			grid.DataMember=table.TableName;
		
			return;
			

		}
		
		#region attributes for convenience
		public DataTable ExamTable
		{
			get
			{
				return examdg.ExamTable;
			}
			set
			{
				examdg.ExamTable=value;
			}
		}

			
		/// <summary>
		/// //指待测数据库中的结果表
		/// </summary>		
		public DataTable ResultTableG
		{
			get
			{
				return examdg.ResultTable;
			}
			set
			{
				examdg.ResultTable=value;
			}
		}

		public DataTable ParamTable
		{
			get
			{
				return cridg.ParamTable;
			}
			set
			{
				cridg.ParamTable=value;
			}
		}

		public DataTable SampleTable
		{
			get
			{
				return cridg.SampleTable;
			}
			set
			{
				cridg.SampleTable=value;
			}
		}


		public DataTable StatisResultTable
		{
			get
			{
				return resultdg.StatisResultTable;
			}
			set
			{
				resultdg.StatisResultTable=value;
			}
		}
		
		
		public DataTable FuzzyResultTable
		{
			get
			{
				return resultdg.FuzzyResultTable;
			}
			set
			{
				resultdg.FuzzyResultTable=value;
			}
		}

		public DataTable TemplateResultTable
		{
			get
			{
				return resultdg.TemplateResultTable;
			}
			set
			{
				resultdg.TemplateResultTable=value;
			}
		}
		
		


		public myExamDataSet ExamSet
		{
			get
			{
				return examdg.ExamSet;
			}
			set
			{
				examdg.ExamSet=value;
			}
		}

		public myCriDataSet CriSet
		{
			get
			{
				return cridg.CriSet;
			}
			set
			{
				cridg.CriSet=value;
			}
		}

		
		public myResultDataSet ResultSet
		{
			get
			{
				return resultdg.ResultSet;
			}
			set
			{
				resultdg.ResultSet=null;
			}
		}



		public DataViewSetting ResultView
		{
			get
			{				
				return resultdg.ResultView;		
			}
			
		}

		public myTemplateDataSet TemplateSet
		{
			get
			{
				return templatedg.TemplateSet;
			}
			set
			{
				templatedg.TemplateSet=null;
			}
		}



		public DataViewSetting TemplateView
		{
			get
			{				
				return templatedg.TemplateView;		
			}
			
		}



		public DataViewSetting ExamView
		{
			get
			{				
				return examdg.ExamView;		
			}
			
		}

		public DataViewSetting ParamView
		{
			get
			{				
				return cridg.ParamView;
			}
			
		}

		public DataViewSetting SampleView
		{
			get
			{				
				return cridg.SampleView;
			}
			
		}
		#endregion 

		
		unsafe private void  outputInfo(byte* s,int l)
		{
			string s2output="";
			for(int i=0;i<l;i++)
				s2output+=(char)s[i];
			ShowMessage(s2output+"\r\n");
			

		}
		private void FormMain_Resize(object sender, System.EventArgs e)
		{
			if(splitter1.SplitPosition>this.Width)
				splitter1.SplitPosition=this.Width*4/5;
		}

		
		
		
		#region 与模板推理相关的一些函数


		unsafe private bool MatchRow( DataRow rawData,DataRow template,DataRow Templatemin,DataRow Templatemax,int bitstoignore,ref double score,ref double scoreIdeal)
		{
			bool ma=true;
		
		       
			foreach(DataColumn col in template.Table.Columns)
			{
				try
				{
					if(rawData.Table.Columns[col.ColumnName]==null)
						continue;
					if(!myTemplateDataSet.IsTemplateGene(col))
						continue;
					if(!myCriDataSet.IsCriField(rawData.Table.Columns[col.ColumnName]))
						continue;
						
					
					if(rawData[col.ColumnName]==null)
						continue;
					//if(template[col].GetType()==typeof(DBNull))
					//		continue;


					if(Templatemin[col.ColumnName].GetType()==typeof(DBNull))
						continue;

					if(Templatemax[col.ColumnName].GetType()==typeof(DBNull))
						continue;
					if(rawData[col.ColumnName].GetType()==typeof(DBNull))
						continue;


					float d=Convert.ToSingle(rawData[col.ColumnName]);
					string strTemplate=template[col].ToString();
					float min=Convert.ToSingle(Templatemin[col.ColumnName]);
					float max=Convert.ToSingle(Templatemax[col.ColumnName]);
					double weight=1.0f;
					DataRow[] dr=myDataSet.FieldSetting.Select("[NAME]= \'" + col.ColumnName+"\'");
					if(dr.Length>=1)
					{

						weight=Convert.ToDouble(dr[0]["WEIGHT"]);
					}



					if(!MatchField(d,min,max,strTemplate,bitstoignore,ref score,ref scoreIdeal,weight))
						ma=false;
						
					
				}//end try
				catch(Exception e)
				{
					throw e;
				}
			}//end foreach						
			return ma;
		}

		/*float datafield		匹配的数据项
		 * float min			编码的下限
		 * float max			编码的上限
		 * string templatefield	           匹配的基因码段
		 * int bitstoignore		忽略的基因码段的后几位
		 * int score			匹配得分(匹配的位数)
		 */ 
		unsafe private bool MatchField(float datafield,float min,float max,string templatefield,int bitstoignore,ref double score,ref double scoreIdeal,double weight)
		{
			
			bool ma=true;
			
			//一下情况针对全为#或为空的模板
			//if(templatefield.LastIndexOfAny(new char[]{'1','0'})<=-1   )
			if(templatefield.Length==0 )
			{
				if(datafield>=min && datafield<=max)
					score+=1*weight;
				
				scoreIdeal+=1*weight;

				return true;
					
			}

			;
				
			fixed(byte *s=new byte[templatefield.Length]) 
			{            
			
		

				//一下情况针对不全为#的模板
						
				NameSpacePetroGA.Encoder.dobin(datafield,s,Convert.ToUInt16(templatefield.Length),min,max);
						
				for(int i=0;i<templatefield.Length-bitstoignore;i++)
				{
					char c=templatefield[i];
					char b=Convert.ToChar(s[i]);
						
					if(c!=b && c!='#' && b!='#')
						ma=false;
					else
						score+=(1L<<(templatefield.Length-i))*weight;
					scoreIdeal+=(1L<<(templatefield.Length-i))*weight;


					
				}//end for
			
			}//end fixed
									
			return ma;
		}


	

⌨️ 快捷键说明

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