📄 futucompetedlg.h
字号:
// FutuCompeteDlg.h : header file
//
#if !defined(AFX_FUTUCOMPETEDLG_H__881DD248_9640_4FCF_84D9_5FE8A29AC509__INCLUDED_)
#define AFX_FUTUCOMPETEDLG_H__881DD248_9640_4FCF_84D9_5FE8A29AC509__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "ComboListCtrl.h"
#define ABS_LIMITED 0.0001 //最终X'和X差值绝对值上限
#define MAX_REQUIRE_NUM 100
#define MAX_COMPETE_NUM 100
#define MAX_EXISOFA_NUM 100
#define MAX_COMPOFB_NUM 100
typedef struct // 坐标结构
{
double x;
double y;
} CoordXY;
typedef struct // 梯度结构
{
double dx;
double dy;
}GradeDxDy;
/////////////////////////////////////////////////////////////////////////////
// CFutuCompeteDlg dialog
class CFutuCompeteDlg : public CDialog
{
// Construction
CFutuCompeteDlg(int m, int n, int l, int c);
private:
double RequireQuantum[MAX_REQUIRE_NUM]; // 需求点的需求量数组
CoordXY XYReq[MAX_REQUIRE_NUM]; // 需求点的位置
CoordXY XYCom[MAX_COMPETE_NUM]; // 现存竞争的配送中心的位置
CoordXY XYExi[MAX_EXISOFA_NUM]; // 欲新增配送中心企业A现存配送中心的位置
double DistCom22[MAX_REQUIRE_NUM][MAX_COMPETE_NUM];
//需求点i到各个竞争配送中心的距离
double DistExi22[MAX_REQUIRE_NUM][MAX_EXISOFA_NUM];
//需求点i到A拥有的现存配送中心的距离
double DistXY22[MAX_REQUIRE_NUM];
//需求点i到企业A新增配送中心X的距离
double DistUV22[MAX_REQUIRE_NUM];
//需求点i到企业B新增配送中心V的距离
double UseCom[MAX_REQUIRE_NUM][MAX_COMPETE_NUM];
//需求点i从各个竞争配送中心获得的效用
double UseExi[MAX_REQUIRE_NUM][MAX_EXISOFA_NUM];
//需求点i从A拥有的各个配送中心获得的效用
double UseXY[MAX_REQUIRE_NUM];
//需求点i从A的新配送中心X获得的效用
double UseUV[MAX_REQUIRE_NUM];
//需求点i从B的新配送中心V获得的效用
//各已存点到各需求点的调整系数
double CoeExi[MAX_REQUIRE_NUM][MAX_EXISOFA_NUM];
//各竞争点到各需求点的调整系数
double CoeCom[MAX_REQUIRE_NUM][MAX_COMPETE_NUM];
//(X,Y)点到各需求点的调整系数
double CoeXY[MAX_REQUIRE_NUM];
//(U,V)点到各需求点的调整系数
double CoeUV[MAX_REQUIRE_NUM];
CoordXY Result_XY, Result_UV; // X和V的位置
double Result_MAXEQ1, Result_MAXEQ2;
double m_dL[MAX_REQUIRE_NUM], m_dM[MAX_REQUIRE_NUM],
m_dN[MAX_REQUIRE_NUM], m_dD[MAX_REQUIRE_NUM],
m_dE[MAX_REQUIRE_NUM];
double m_dDeta, m_dA, m_dB, m_dC;
// method
CoordXY GetInitX(); // 获得初值X0
CoordXY GetVFromX(CoordXY X); // 通过给定的X获得V(u,v)
private:
// 先求M、N、L,再求D、E,然后才能求A、B、C
void setM();
void setN();
void setL();
void setD();
void setE();
void getDeta(double u, double v, double x, double y);
void getA(double u);
void getB(double u, double v);
void getC(double v);
//以下函数为获取E(Q)1(X,V)和E(Q)2(X,V)的各项导数
double P1EQ1_Px(double x);
double P1EQ1_Pu(double u);
double P1EQ1_Pv(double v);
double P1EQ1_Py(double y);
double P2EQ2_PuPx(double u, double x);
double P2EQ2_PuPy(double u, double y);
double P2EQ2_PvPx(double v, double x);
double P2EQ2_PvPy(double v, double y);
double P2EQ2_PuPu(double u);
double P2EQ2_PvPv(double v);
double P2EQ2_PuPv(double u, double v);
// double P2EQ1_PuPy(double u, double y);
// double P2EQ1_PvPy(double v, double y);
double D1EQ1_Dx(double x, double y, double u, double v);
double D1EQ1_Dy(double x, double y, double u, double v);
double getEQ1(double x, double y, double u, double v);
double getEQ2(double x, double y, double u, double v);
// void getBoundsofX(double &left, double &top, double &right, double &bottom);
void refreshData(double x, double y, double u, double v);
double dEQ1_dNubra(double x, double y, double u, double v,
double a, double b);
double Get_Nubra(double x, double y, double u, double v,
double a, double b);
public:
void GetXYUVDist22(double x, double y,
double u, double v);
void InitData();
void ComputeProc();
CoordXY GetVfromX(CoordXY X,
int m,
CoordXY *oriAPos,
double *Q ,
double *L,
double *E,
double *Uiv);
GradeDxDy ComputeGrads(double XYx, double XYy, double UVx, double UVy);
void ComputeEQ(double XYx, double XYy, double UVx, double UVy);
void GetCoeOfDistance();
void GetUseToRequire();
void GetDistance22();
void GetRequireQuantum();
void GetXYofAllPoints();
CFutuCompeteDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CFutuCompeteDlg)
enum { IDD = IDD_FUTUCOMPETE_DIALOG };
CEdit m_ctrlEQ2;
CEdit m_ctrlEQ1;
CEdit m_ctrlUV;
CEdit m_ctrlXY;
CStatic m_ctrlDispEQ1;
CStatic m_ctrlDispXY;
CStatic m_ctrlDispUV;
CStatic m_ctrlDispEQ2;
CComboListCtrl m_listRequireCoord;
CComboListCtrl m_listXYUse;
CComboListCtrl m_listXYCoe;
CComboListCtrl m_listUVUse;
CComboListCtrl m_listUVCoe;
CComboListCtrl m_listExistOfAUse;
CComboListCtrl m_listExistOfACoord;
CComboListCtrl m_listExistOfACoe;
CComboListCtrl m_listCompeteUse;
CComboListCtrl m_listCompeteCoord;
CComboListCtrl m_listCompeteCoe;
CEdit m_ctrlRequireNum;
CEdit m_ctrlExistOfANum;
CEdit m_ctrlCompOfBNum;
CEdit m_ctrlCompeteNum;
int m_nnCompeteNum;
int m_nlCompOfBNum;
int m_ncExistOfANum;
int m_nmRequireNum;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFutuCompeteDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CFutuCompeteDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnButtonCompute();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_FUTUCOMPETEDLG_H__881DD248_9640_4FCF_84D9_5FE8A29AC509__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -