ВЫВОДЫ
Результатом работы является исполняемое Win32-приложение, позволяющее строить следующие функции принадлежности:
- треугольную;
- трапециидальную;
- гауссовскую;
- расширенную гауссовскую;
- сигмоидальную.
Так же программа позволяет определять значение степени принадлежности заданной точки x.
В ходе разработки приложения были изучены структура и возможности набора классов MFC, принципы проектирования визуального интерфейса пользователя в операционной среде MS Windows с использованием среды разработки MS Visual Studio. Было замечено, что классы MFC существенно ускоряют процесс создания приложений для операционной системы Microsoft Windows.
Так же были изучены основы теории нечетких множеств, в частности функции принадлежности.
ПЕРЕЧЕНЬ ССЫЛОК
1. Microsoft Developer Network Library _ April 2003
2. Васильев В.И., Ильясов Б.Г. Интеллектуальные системы управления с использованием нечеткой логики: Учеб. пособие / Уфимск. гос. авиац. техн. ун-т. -Уфа, 1995. -80 c
3. Грегори К. Использование Visual C++ 6. Специальное издание.: Пер. с англ. - М.: СПб.; К.: Издательский дом «Вильямс», 2003. - 849 с.
4. Заде Л. Понятие лингвистической переменной и его применение к принятию приближенных решений. - М.: Мир, 1976.
5. Нечеткая логика _ математические основы _ BaseGroup Labs
http://www.basegroup.ru/fuzzylogic/math_print.htm
6. Страуструп Бьярн Язык программирования C++ Второе издание. - К.: ДиаСофт, 1993. - 480 с.
ПРИЛОЖЕНИЕ
Приложение А
Листинг программы
// Fuzzy_.h: interface for the CFuzzy_ class.
class CFuzzy_
{
public:
void fisError(char *msg);
CFuzzy_();
virtual ~CFuzzy_();
double CFuzzy_::fisTriangleMf(double x, double *params);
double fisTrapezoidMf(double x, double *params);
double fisGaussianMf(double x, double *params);
double fisGaussian2Mf(double x, double *params);
double fisSigmoidMf(double x, double *params);
};
// Fuzzy_.cpp: implementation of the CFuzzy_ class.
#include "stdafx.h"
#include "fuzzy.h"
#include "Fuzzy_.h"
#include <math.h>
#ifndef ABS
# define ABS(x) ( (x) > (0) ? (x): (-(x)) )
#endif
#ifndef MAX
# define MAX(x,y) ( (x) > (y) ? (x) : (y) )
#ifndef MIN
# define MIN(x,y) ( (x) < (y) ? (x) : (y) )
CFuzzy_::CFuzzy_()
}
CFuzzy_::~CFuzzy_()
/* Triangular membership function */
double CFuzzy_::fisTriangleMf(double x, double *params)
double a = params[0], b = params[1], c = params[2];
if (a>b)
{fisError("Illegal parameters in fisTriangleMf() --> a > b");return -1;}
if (b>c)
{fisError("Illegal parameters in fisTriangleMf() --> b > c");return -1;}
if (a == b && b == c)
return(x == a);
if (a == b)
return((c-x)/(c-b)*(b<=x)*(x<=c));
if (b == c)
return((x-a)/(b-a)*(a<=x)*(x<=b));
return(MAX(MIN((x-a)/(b-a), (c-x)/(c-b)), 0));
/* Trapezpoidal membership function */
double CFuzzy_::fisTrapezoidMf(double x, double *params)
double a = params[0], b = params[1], c = params[2], d = params[3];
double y1 = 0, y2 = 0;
if (a>b) {
fisError("Illegal parameters in fisTrapezoidMf() --> a > b");
fisError("Illegal parameters in fisTrapezoidMf() --> b > c");
if (c>d) {
fisError("Illegal parameters in fisTrapezoidMf() --> c > d");
if (b <= x)
y1 = 1;
else if (x < a)
y1 = 0;
else if (a != b)
y1 = (x-a)/(b-a);
if (x <= c)
y2 = 1;
else if (d < x)
y2 = 0;
else if (c != d)
y2 = (d-x)/(d-c);
return(MIN(y1, y2));
/* Gaussian membership function */
double CFuzzy_::fisGaussianMf(double x, double *params)
double sigma = params[0], c = params[1];
double tmp;
if (sigma==0)
fisError("Illegal parameters in fisGaussianMF() --> sigma = 0");
tmp = (x-c)/sigma;
return(exp(-tmp*tmp/2));
/* Extended Gaussian membership function */
double CFuzzy_::fisGaussian2Mf(double x, double *params)
(sigma2 == 0))
/* Sigmoidal membership function */
double CFuzzy_::fisSigmoidMf(double x, double *params)
double a = params[0], c = params[1];
return(1/(1+exp(-a*(x-c))));
void CFuzzy_::fisError(char *msg)
// fuzzy.h : main header file for the FUZZY application CFuzzyApp
#include "resource.h"
class CFuzzyApp : public CWinApp
CFuzzyApp();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFuzzyApp)
virtual BOOL InitInstance();
//}}AFX_VIRTUAL
// Implementation
//{{AFX_MSG(CFuzzyApp)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
// fuzzy.cpp : Defines the class behaviors for the application. CFuzzyApp
#include "fuzzyDlg.h"
BEGIN_MESSAGE_MAP(CFuzzyApp, CWinApp)
//{{AFX_MSG_MAP(CFuzzyApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
CFuzzyApp::CFuzzyApp()
CFuzzyApp theApp;
// CFuzzyApp initialization
BOOL CFuzzyApp::InitInstance()
AfxEnableControlContainer();
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
CFuzzyDlg dlg;
m_pMainWnd = &dlg;
dlg.DoModal();
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
// fuzzyDlg.h : header file
// CFuzzyDlg dialog
class CFuzzyDlg : public CDialog
// Construction
void PlotTrapezoid();
void PlotTriangle();
void PlotGaussian();
void PlotSigmoid();
void PlotGaussian2();
void Axis();
CButton *R_Tri, *R_Tra, *R_Ga, *R_Ga2, *R_Sig;
CFuzzyDlg(CWnd* pParent = NULL);// standard constructor
// Dialog Data
//{{AFX_DATA(CFuzzyDlg)
enum { IDD = IDD_FUZZY_DIALOG };
CEditpar_d;
CEditpar_c;
CEditpar_b;
CEditpar_a;
CStaticm_grapho;
//}}AFX_DATA
//{{AFX_VIRTUAL(CFuzzyDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CFuzzyDlg)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnButton1();
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnRadio1();
afx_msg void OnRadio2();
afx_msg void OnRadio3();
afx_msg void OnRadio4();
afx_msg void OnRadio5();
// fuzzyDlg.cpp : implementation file
//
#include "fuzzy_.h"
Страницы: 1, 2, 3, 4, 5