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

📄 nettest.cpp

📁 C++BUILDER与MATLAB实现混合编程源代码
💻 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 + -