📄 mfsolver.h
字号:
#pragma once
#include "BasicData.h"
#include "stdafx.h"
#include <vector>
#include <list>
#include "C:\MATLAB6p5\extern\include\engine.h"
// Material Flow Solver
class MFSolver
{
private:
std::vector<Dealer> dealerSet; // 所有零售商的信息
std::vector<RDC> RDCSet; // 所有地包商的信息
std::list<Path> pathSet; // 所有路径
std::list<int> candidateSet; // 候选的零售商
std::list<int> addSet; // 需要点对点满载运输的零售商
// 所有可配置选项
double max_load; // 最大载重量
double min_load; // 最小载重量
double speed; // 卡车时速
double short_threshold; // 短程和长途路程的分界线
public:
bool isOK; // 是否正确读取文件
public:
// 给定数据文件,构造物流求解器
MFSolver(const std::string &fn);
// 析构
~MFSolver();
// 获取站点 d 到路径 p 的起点的距离
double GetDistance(const Path &p, const Dealer &d) const;
// 获取站点 d 到路径 p 最后一站的距离
double GetLength(const Path &p, const Dealer &d) const;
// 获取地包商的运费标准
void GetCostStandard(const Path&p, double &s_cpm, double &s_cph, double &l_cpm, double &l_cps, double &storage_cost, double &router_cost) const;
// 计算将站点 d 添加到路径 p 后的总开销
double GetTotalCost(const Path &p, const Dealer &d) const;
// 计算将站点 d 添加到路径 p 中需要增加的开销
double GetDiffCost(const Path &p, const Dealer &d) const;
// 计算目标函数值,参数是路径 p 和待添加的站点 d。
double GetObjectiveValue(const Path &p, const Dealer &d) const;
// 一次扩展。
void ExpandPath(Engine *ep, std::list<int> &candidateSet, bool useTimes = false);
// 计算所有物流路线。
void ComputeFlow(Engine *ep);
// 在Matlab窗口中用动画的形式画出线段
void DrawPath(Engine *ep, const Path &p, const Dealer &d) const;
// 打印所有路径
void PrintResult(Engine *ep, CString &OutputBuf) const;
// 打印地包商和零售商的信息
void PrintInfo(Engine *ep) const;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -