📄 formmain.cs
字号:
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 + -