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

📄 futucompetedlg.h

📁 考虑未来竞争的空间交互选址问题求解
💻 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 + -