#pragma once
#include "pandaAlgorithm.h"
#include "OptScheduling.h"
#include  <vector>

/**
*@brief 直接优化调度
*/
class PANDAALGORITHM_API  FirstOptScheduling:public OptScheduling
{
public:
	FirstOptScheduling();
	~FirstOptScheduling();


	/**
	* @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 std::vector<double>& HC, const std::vector<double>& HF);

	/**
	* @brief 水泵供水功耗
	* @param
	* @param
	* @return
	*/
	virtual double pumpPower(const PumpStruct& pumpParam);

	/**
	* @brief 制水成本
	* @param [vector<double>] Q[i] 第i个泵站供水量
	* @param [vector<double>] S3[i] 第i个泵站的制水成本，单位: 元/m3
	* @return
	*/
	virtual double waterProductionCost(const vector<double>& Q, const vector<double>& S3);

	virtual double waterSupplyAndDemand(const vector<double>& Q, const double& Qd);


};
