📄 nettest.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "NetTest.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "nnToolKit_OCX"
#pragma resource "*.dfm"
TfrmNnet *frmNnet;
//---------------------------------------------------------------------------
__fastcall TfrmNnet::TfrmNnet(TComponent* Owner)
: TForm(Owner)
{
iCount = 1;
}
//---------------------------------------------------------------------------
void __fastcall TfrmNnet::btnSimulateClick(TObject *Sender)
{
int iInputNums = txtInput1->Text.ToInt();
int iDataRows = lstTestData->Items->Count;
if(iDataRows<iInputNums)
{
ShowMessage("输入测试数据不够!");
return;
}
Variant ParaIn1(OPENARRAY(int,(0,3)),varDouble);
Variant ParaIn2(OPENARRAY(int,(0,iInputNums)),varDouble);
TVariant RetValue;
double NetParaDouble[3],SimulatePara[7],RetDouble;
TVariant InputFunc; //输入层到中间层的传递函数
TVariant OutputFunc; //中间层到输出层的传递函数
TVariant FileDir; //专家样本数据文件目录
FileDir = ExtractFilePath(Application->ExeName) +"netdata";
TVariant ModelNo = "1"; //模型编号
AnsiString i = cboxFunc1->Items->Strings[cboxFunc1->ItemIndex] ;
if(cboxFunc1->ItemIndex==0)
InputFunc="purelin";
else if(cboxFunc1->ItemIndex==1)
InputFunc="tansig";
else if(cboxFunc1->ItemIndex==2)
InputFunc="logsig";
else
InputFunc="tansig";
if(cboxFunc2->ItemIndex==0)
OutputFunc="purelin";
else if(cboxFunc2->ItemIndex==1)
OutputFunc="tansig";
else if(cboxFunc2->ItemIndex==2)
OutputFunc="logsig";
else
OutputFunc="purelin";
NetParaDouble[0] = txtInput1->Text.ToDouble();
NetParaDouble[1] = txtOutput1->Text.ToDouble();
NetParaDouble[2] = txtHide1->Text.ToDouble();
for(int i=0; i < 3; i++){
ParaIn1.PutElement(NetParaDouble[i],i);
}
TListItem* pItem ;
for(int i=0;i<iInputNums;i++)
{
pItem = lstTestData->Items->Item[i];
SimulatePara[i] = (pItem->SubItems->Strings[0]).ToDouble();
}
for(int i=0; i < iInputNums; i++){
ParaIn2.PutElement(SimulatePara[i],i);
}
nnToolKit1->lmsimu(1,&RetValue,ModelNo,ParaIn1,ParaIn2,InputFunc,OutputFunc,FileDir);
RetDouble=RetValue;
ShowMessage("仿真成功!");
btnShowResult->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmNnet::btnTrainClick(TObject *Sender)
{
try{
Variant ParaIn1(OPENARRAY(int,(0,4)),varDouble); //神经网络模型参数
Variant ParaIn2(OPENARRAY(int,(0,8)),varDouble); //神经网络训练参数
TVariant RetValue; //函数返回值
double NetParaDouble[4],TrainParaDouble[8],RetDouble;
TVariant InputFunc; //输入层到中间层的传递函数
TVariant OutputFunc; //中间层到输出层的传递函数
TVariant FileDir; //专家样本数据文件目录
FileDir = ExtractFilePath(Application->ExeName) +"netdata";
TVariant ModelNo = "1"; //模型编号
AnsiString i = cboxFunc1->Items->Strings[cboxFunc1->ItemIndex] ;
if(cboxFunc1->ItemIndex==0)
InputFunc="purelin";
else if(cboxFunc1->ItemIndex==1)
InputFunc="tansig";
else if(cboxFunc1->ItemIndex==2)
InputFunc="logsig";
else
InputFunc="tansig";
if(cboxFunc2->ItemIndex==0)
OutputFunc="purelin";
else if(cboxFunc2->ItemIndex==1)
OutputFunc="tansig";
else if(cboxFunc2->ItemIndex==2)
OutputFunc="logsig";
else
OutputFunc="purelin";
NetParaDouble[0] = txtInput->Text.ToDouble();
NetParaDouble[1] = txtOutput->Text.ToDouble();
NetParaDouble[2] = txtHide->Text.ToDouble();
NetParaDouble[3] = txtExpertNums->Text.ToDouble();
for(int i=0; i < 4; i++){
ParaIn1.PutElement(NetParaDouble[i],i);
}
TrainParaDouble[0] = Edit1->Text.ToDouble();
TrainParaDouble[1] = Edit2->Text.ToDouble();
TrainParaDouble[2] = Edit3->Text.ToDouble();
TrainParaDouble[3] = Edit8->Text.ToDouble();
TrainParaDouble[4] = Edit4->Text.ToDouble();
TrainParaDouble[5] = Edit5->Text.ToDouble();
TrainParaDouble[6] = Edit6->Text.ToDouble();
TrainParaDouble[7] = Edit7->Text.ToDouble();
for(int i=0; i < 8; i++){
ParaIn2.PutElement(TrainParaDouble[i],i);
}
nnToolKit1->lmtrain(1,&RetValue,ModelNo,ParaIn1,ParaIn2,InputFunc,OutputFunc,FileDir);
RetDouble=RetValue;
ShowMessage("网络训练成功,循环次数:"+FloatToStr(RetDouble)+" 次");
txtInput1->Text = txtInput->Text;
txtHide1->Text = txtHide->Text;
txtOutput1->Text = txtOutput->Text;
cboxFunc3->Text = cboxFunc1->Text;
cboxFunc4->Text = cboxFunc2->Text;
}
catch (Exception &exception)
{
ShowMessage("修改后的网络训练参数与加载的数据文件不一致,请修改训练参数!");
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmNnet::FormCreate(TObject *Sender)
{
cboxFunc1->ItemIndex = 1;
cboxFunc2->ItemIndex = 0;
}
//---------------------------------------------------------------------------
void __fastcall TfrmNnet::btnLoadDataClick(TObject *Sender)
{
try{
TVariant FileName; //专家样本数据文件名
FileName = ExtractFilePath(Application->ExeName) +"netdata\\input_para1.txt";
ShowMessage("系统路径为:"+ExtractFilePath(Application->ExeName));
RichInput->Lines->LoadFromFile(FileName);
FileName = ExtractFilePath(Application->ExeName) +"netdata\\output_para1.txt";
RichOutput->Lines->LoadFromFile(FileName);
txtExpertNums->Text = RichInput->Lines->Count;
}
catch (Exception &exception)
{
ShowMessage("专家样本数据文件不存在,请确认后再作操作!");
return;
}
btnTrain->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmNnet::btnShowResultClick(TObject *Sender)
{
TVariant FileName; //仿真结果数据文件名
FileName = ExtractFilePath(Application->ExeName) +"netdata\\result1.dat";
try{
RichResult->Lines->LoadFromFile(FileName);
}
catch (Exception &exception)
{
ShowMessage("尚未进行仿真操作!");
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmNnet::btnClearClick(TObject *Sender)
{
lstTestData->Items->Clear() ;
iCount = 1;
}
//---------------------------------------------------------------------------
void __fastcall TfrmNnet::btnAddClick(TObject *Sender)
{
double dValue = 0.0;
AnsiString sValue = txtData->Text;
try{
dValue = sValue.ToDouble();
TListItem* pItem ;
pItem = lstTestData->Items->Add() ;
pItem->Caption = iCount ;
pItem->SubItems->Add(txtData->Text);
iCount++;
txtData->Text = "";
txtData->SetFocus();
}
catch (Exception &exception)
{
ShowMessage("输入的数据中含有非法字符,请重新输入!");
txtData->Text = "";
txtData->SetFocus();
return;
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -