using System;
namespace KarstModel
{
/// <summary>
/// BP3Layer 的摘要说明。
/// </summary>
public class BP3Layer:IModel
{
public BP3Layer()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//private int nargOut=6;
private object W1;
private object B1;
private object W2;
private object B2;
private object Y1;
private object Y2;
private object[,] P;
private object[,] T;
private object S1;
private object S2;
private object TF1;
private object TF2;
private object BTF;
private object BLF;
private object PF;
private object epochs;
private object goal;
private object[,] P_test;
private bool hasParameters=false;
#region IModel 成员
public void run()
{
try
{
//BP.BPclassClass bp=new BP.BPclassClass();
BP2.BP2 bp2=new BP2.BP2();
W1=null;B1=null;W2=null;B2=null;Y1=null;Y2=null;
bp2.bp(6,ref W1,ref B1,ref W2,ref B2,ref Y1,ref Y2,P,T,S1,S2,TF1,TF2,BTF,BLF,PF,epochs,goal,P_test);
//bp.BP(nargOut,ref W1,ref B1,ref W2,ref B2,ref Y1,ref Y2,P,T,S1,S2,TF1,TF2,BTF,BLF,PF,epochs,goal,P_test);
}
catch(Exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
}
}
public bool setParameters(System.Collections.Hashtable para)
{//输入数据时,要转换为MATLAB需要的Object类型.
try
{
//P=(object [,])para["P"];
double[,] tArray=(double[,])para["P"];
int row=tArray.GetUpperBound(0)+1;
int rol=tArray.GetUpperBound(1)+1;
P=new object[row,rol];
for(int iRow=0;iRow<row;iRow++)
for(int iRol=0;iRol<rol;iRol++)
P[iRow,iRol]=tArray[iRow,iRol];
//T=(object [,])para["T"];
tArray=(double[,])para["T"];
row=tArray.GetUpperBound(0)+1;
rol=tArray.GetUpperBound(1)+1;
T=new object[row,rol];
for(int iRow=0;iRow<row;iRow++)
for(int iRol=0;iRol<rol;iRol++)
T[iRow,iRol]=tArray[iRow,iRol];
long t_S1=Convert.ToInt32(para["S1"]);
S1=(object)t_S1;
long t_S2=Convert.ToInt32(para["S2"]);
S2=(object)t_S2;
switch((long)para["TF1"])
{
case 0:TF1="tansig";break;
case 1:TF1="logsig";break;
case 2:TF1="purelin";break;
}
switch((long)para["TF2"])
{
case 0:TF2="tansig";break;
case 1:TF2="logsig";break;
case 2:TF2="purelin";break;
}
switch((long)para["BTF"])
{
case 0:BTF="trainlm";break;
case 1:BTF="trainbfg";break;
case 2:BTF="trainrp";break;
case 3:BTF="traingd";break;
}
switch((long)para["BLF"])
{
case 0:BLF="learngdm";break;
case 1:BLF="learngd";break;
}
switch((long)para["PF"])
{
case 0:PF="mse";break;
case 1:PF="msereg";break;
}
long t_epochs=Convert.ToInt32(para["epochs"]);
epochs=t_epochs;
double t_goal=(double)para["goal"];
goal=t_goal;
//P_test=(object [,])para["P_test"];
tArray=(double[,])para["P_test"];
row=tArray.GetUpperBound(0)+1;
rol=tArray.GetUpperBound(1)+1;
P_test=new object[row,rol];
for(int iRow=0;iRow<row;iRow++)
for(int iRol=0;iRol<rol;iRol++)
P_test[iRow,iRol]=(object)tArray[iRow,iRol];
hasParameters=true;
return true;
}
catch(Exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
return false;
}
}
public System.Collections.Hashtable GetParameters()
{
// TODO: 添加 BP3Layer.GetParameters 实现
return null;
}
public System.Collections.Hashtable GetResult()
{
// TODO: 添加 BP3Layer.GetResult 实现
return null;
}
public System.Data.DataTable GetResultAsTable()
{
// TODO: 添加 BP3Layer.GetResultAsTable 实现
return null;
}
public string ResultToString()
{
// TODO: 添加 BP3Layer.ResultToString 实现
return null;
}
public string GetKeywords()
{
// TODO: 添加 BP3Layer.GetKeywords 实现
return null;
}
public string GetDiscription()
{
// TODO: 添加 BP3Layer.GetDiscription 实现
return null;
}
public string GetSubjects()
{
// TODO: 添加 BP3Layer.GetSubjects 实现
return null;
}
public IModel[] GetChildren()
{
// TODO: 添加 BP3Layer.GetChildren 实现
return null;
}
public ParaData[] GetParaData()
{
ParaData[] ans=new ParaData[12];
ans[0]=new ParaData(-1,"P","训练数据",2,"double","训练数据","");
ans[1]=new ParaData(-1,"T","训练数据的目标输出",2,"double","目标输出","");
ans[2]=new ParaData(-1,"S1","隐层节点数",0,"long","隐层节点数","");
ans[3]=new ParaData(-1,"S2","输出层节点数",0,"long","输出层节点数","");
ans[4]=new ParaData(-1,"TF1","隐层的输出函数",3,"int","隐层的输出函数","tansig,logsig,purelin");
ans[5]=new ParaData(-1,"TF2","输出层的输出函数",3,"int","输出层的输出函数","tansig,logsig,purelin");
ans[6]=new ParaData(-1,"BTF","训练函数",3,"int","训练函数","trainlm,trainbfg,trainrp,traingd");
ans[7]=new ParaData(-1,"BLF","BP学习算法",3,"int","BP学习算法","learngdm,learngd");
ans[8]=new ParaData(-1,"PF","网络性能函数",3,"int","网络性能函数","mse,msereg");
ans[9]=new ParaData(-1,"epochs","最大循环次数",0,"long","最大循环次数","");
ans[10]=new ParaData(-1,"goal","目标误差",0,"double","目标误差","");
ans[11]=new ParaData(-1,"P_test","测试数据",2,"double","测试数据","");
return ans;
}
public ModelData GetModelData()
{
ModelData ans=new ModelData();
ans.name="BP3Layer";
ans.realName="3层BP神经网络模型";
ans.useMethod="按向导输入参数后运行即可";
ans.uses="BP神经网络模型";
ans.filename="model.dll";
ans.description="BP神经网络模型";
ans.keyWords="BP神经网络模型";
ans.classes=3;
return ans;
}
#endregion
}
}
namespace KarstModel
{
/// <summary>
/// BP3Layer 的摘要说明。
/// </summary>
public class BP3Layer:IModel
{
public BP3Layer()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//private int nargOut=6;
private object W1;
private object B1;
private object W2;
private object B2;
private object Y1;
private object Y2;
private object[,] P;
private object[,] T;
private object S1;
private object S2;
private object TF1;
private object TF2;
private object BTF;
private object BLF;
private object PF;
private object epochs;
private object goal;
private object[,] P_test;
private bool hasParameters=false;
#region IModel 成员
public void run()
{
try
{
//BP.BPclassClass bp=new BP.BPclassClass();
BP2.BP2 bp2=new BP2.BP2();
W1=null;B1=null;W2=null;B2=null;Y1=null;Y2=null;
bp2.bp(6,ref W1,ref B1,ref W2,ref B2,ref Y1,ref Y2,P,T,S1,S2,TF1,TF2,BTF,BLF,PF,epochs,goal,P_test);
//bp.BP(nargOut,ref W1,ref B1,ref W2,ref B2,ref Y1,ref Y2,P,T,S1,S2,TF1,TF2,BTF,BLF,PF,epochs,goal,P_test);
}
catch(Exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
}
}
public bool setParameters(System.Collections.Hashtable para)
{//输入数据时,要转换为MATLAB需要的Object类型.
try
{
//P=(object [,])para["P"];
double[,] tArray=(double[,])para["P"];
int row=tArray.GetUpperBound(0)+1;
int rol=tArray.GetUpperBound(1)+1;
P=new object[row,rol];
for(int iRow=0;iRow<row;iRow++)
for(int iRol=0;iRol<rol;iRol++)
P[iRow,iRol]=tArray[iRow,iRol];
//T=(object [,])para["T"];
tArray=(double[,])para["T"];
row=tArray.GetUpperBound(0)+1;
rol=tArray.GetUpperBound(1)+1;
T=new object[row,rol];
for(int iRow=0;iRow<row;iRow++)
for(int iRol=0;iRol<rol;iRol++)
T[iRow,iRol]=tArray[iRow,iRol];
long t_S1=Convert.ToInt32(para["S1"]);
S1=(object)t_S1;
long t_S2=Convert.ToInt32(para["S2"]);
S2=(object)t_S2;
switch((long)para["TF1"])
{
case 0:TF1="tansig";break;
case 1:TF1="logsig";break;
case 2:TF1="purelin";break;
}
switch((long)para["TF2"])
{
case 0:TF2="tansig";break;
case 1:TF2="logsig";break;
case 2:TF2="purelin";break;
}
switch((long)para["BTF"])
{
case 0:BTF="trainlm";break;
case 1:BTF="trainbfg";break;
case 2:BTF="trainrp";break;
case 3:BTF="traingd";break;
}
switch((long)para["BLF"])
{
case 0:BLF="learngdm";break;
case 1:BLF="learngd";break;
}
switch((long)para["PF"])
{
case 0:PF="mse";break;
case 1:PF="msereg";break;
}
long t_epochs=Convert.ToInt32(para["epochs"]);
epochs=t_epochs;
double t_goal=(double)para["goal"];
goal=t_goal;
//P_test=(object [,])para["P_test"];
tArray=(double[,])para["P_test"];
row=tArray.GetUpperBound(0)+1;
rol=tArray.GetUpperBound(1)+1;
P_test=new object[row,rol];
for(int iRow=0;iRow<row;iRow++)
for(int iRol=0;iRol<rol;iRol++)
P_test[iRow,iRol]=(object)tArray[iRow,iRol];
hasParameters=true;
return true;
}
catch(Exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
return false;
}
}
public System.Collections.Hashtable GetParameters()
{
// TODO: 添加 BP3Layer.GetParameters 实现
return null;
}
public System.Collections.Hashtable GetResult()
{
// TODO: 添加 BP3Layer.GetResult 实现
return null;
}
public System.Data.DataTable GetResultAsTable()
{
// TODO: 添加 BP3Layer.GetResultAsTable 实现
return null;
}
public string ResultToString()
{
// TODO: 添加 BP3Layer.ResultToString 实现
return null;
}
public string GetKeywords()
{
// TODO: 添加 BP3Layer.GetKeywords 实现
return null;
}
public string GetDiscription()
{
// TODO: 添加 BP3Layer.GetDiscription 实现
return null;
}
public string GetSubjects()
{
// TODO: 添加 BP3Layer.GetSubjects 实现
return null;
}
public IModel[] GetChildren()
{
// TODO: 添加 BP3Layer.GetChildren 实现
return null;
}
public ParaData[] GetParaData()
{
ParaData[] ans=new ParaData[12];
ans[0]=new ParaData(-1,"P","训练数据",2,"double","训练数据","");
ans[1]=new ParaData(-1,"T","训练数据的目标输出",2,"double","目标输出","");
ans[2]=new ParaData(-1,"S1","隐层节点数",0,"long","隐层节点数","");
ans[3]=new ParaData(-1,"S2","输出层节点数",0,"long","输出层节点数","");
ans[4]=new ParaData(-1,"TF1","隐层的输出函数",3,"int","隐层的输出函数","tansig,logsig,purelin");
ans[5]=new ParaData(-1,"TF2","输出层的输出函数",3,"int","输出层的输出函数","tansig,logsig,purelin");
ans[6]=new ParaData(-1,"BTF","训练函数",3,"int","训练函数","trainlm,trainbfg,trainrp,traingd");
ans[7]=new ParaData(-1,"BLF","BP学习算法",3,"int","BP学习算法","learngdm,learngd");
ans[8]=new ParaData(-1,"PF","网络性能函数",3,"int","网络性能函数","mse,msereg");
ans[9]=new ParaData(-1,"epochs","最大循环次数",0,"long","最大循环次数","");
ans[10]=new ParaData(-1,"goal","目标误差",0,"double","目标误差","");
ans[11]=new ParaData(-1,"P_test","测试数据",2,"double","测试数据","");
return ans;
}
public ModelData GetModelData()
{
ModelData ans=new ModelData();
ans.name="BP3Layer";
ans.realName="3层BP神经网络模型";
ans.useMethod="按向导输入参数后运行即可";
ans.uses="BP神经网络模型";
ans.filename="model.dll";
ans.description="BP神经网络模型";
ans.keyWords="BP神经网络模型";
ans.classes=3;
return ans;
}
#endregion
}
}