1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#pragma once
#include "pandaAlgorithm.h"
#include <vector>
#include <map>
#include <string>
using namespace std;
class PANDAALGORITHM_API OptScheduling
{
public:
explicit OptScheduling();
virtual ~OptScheduling();
/**
水泵参数
*/
struct PumpStruct
{
double a; // 换算系数
std::vector<double> mS1; // 第i泵站的基本电费
std::vector<double> mS2; // 别第i泵站的电度电价
std::vector<std::vector<int>> mNS; // 第i个泵站第j种泵的开机台数
std::vector<std::vector<double>> mQS; // 第i个泵站第j中泵的供水量
std::vector<std::vector<double>> mHS;// 第i泵站第j种水泵的计算扬
std::vector<std::vector< double>> mY;// 第i泵站第j种水泵的计算效率,可由水泵Q~v曲线拟合其关系式
std::vector<std::vector< double>> mX; // 第两i站第j水泵机组的传动效率
std::vector<int> mK; // 第i泵站中定速泵的台数
std::vector<int> mP; //第i泵站中调速泵的台数
};
/**
* @brief 目标函数,计算适应度值
* @param [in] monitorVals
*/
virtual double objectiveFunction(float cost, const map<string,double>& monitorVals);
/**
* @brief 供需压差函数
* @param [in] HC[i]: 测压点i预测压力值
* @param [in] HF[I]: 测压点i要求的最低供水服务压力。
* @return
*/
virtual double pressureDifference(const vector<double>& HC,const vector<double>& HF);
/**
* @brief 水泵供水功耗
* @param
* @param
* @return
*/
virtual double pumpPower(const PumpStruct& pumpParam);
/**
* @brief 制水成本
* @param
* @param
* @return
*/
virtual double waterProductionCost(const vector<double>& Q,const vector<double>& S3);
/**
* @brief 供需水量
* @param [vector<double>] Q[i] 第 i 个泵站调度供水量
* @param [double] Qd 总需水量,预测
* @return
*/
virtual double waterSupplyAndDemand(const vector<double>& Q, const double& Qd );
// 设置监测点的最大值
void setMaxMonitorVals(const map<string, double>& maxMonitors);
// 设置监测点的最小值
void setMinMonitorsVals(const map<string, double>& minMonitors);
protected:
// 惩罚因子1
double C1;
// 惩罚因子2
double C2;
// 设置的监测点的调度最大值
map<string, double> mMaxMonitorVals;
// 设置的监测点的调度最小值
map<string, double> mMinMonitorVals;
};