|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Text;
|
using System.IO;
|
using System.Linq;
|
using System.Drawing;
|
|
using Hydro.CommonBase;
|
|
namespace CoustomEval
|
{
|
[Serializable]
|
public class myLib
|
{
|
|
/// <summary>
|
/// 管线流量:梁坨水厂_往兰家院
|
/// </summary>
|
public double TMethod0(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 管线流量:梁坨水厂_往松树桥
|
/// </summary>
|
public double TMethod1(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 节点需水量:梁沱二级需水量_大竹林
|
/// </summary>
|
public double TMethod2(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 节点需水量:梁坨二级需水量_石马河
|
/// </summary>
|
public double TMethod3(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 管线流量:兰家院子_进水量
|
/// </summary>
|
public double TMethod4(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]-paramArray[1];
|
}
|
|
/// <summary>
|
/// 管线流量:兰家院子_出水量
|
/// </summary>
|
public double TMethod5(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 节点压力:兰家院子_水位变化
|
/// </summary>
|
public double TMethod6(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return (paramArray[0]-paramArray[1])/(35*35*2)/4;
|
}
|
|
/// <summary>
|
/// 节点压力:兰家院子_水位
|
/// </summary>
|
public double TMethod7(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
if (paramArray[0]!=variable.ErrNum)
|
return paramArray[1]+paramArray[2]; else
|
|
return paramArray[3];
|
}
|
|
/// <summary>
|
/// 节点压力:兰家院子_容积
|
/// </summary>
|
public double TMethod8(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]*(35*35*2);
|
}
|
|
/// <summary>
|
/// 管线流量:松树桥_进水量
|
/// </summary>
|
public double TMethod9(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]-paramArray[1];
|
}
|
|
/// <summary>
|
/// 管线流量:松树桥_出水量
|
/// </summary>
|
public double TMethod10(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
|
}
|
|
/// <summary>
|
/// 节点压力:松树桥_水位变化
|
/// </summary>
|
public double TMethod11(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return (paramArray[0]-paramArray[1])/(41.8*25.8*2)/4;
|
}
|
|
/// <summary>
|
/// 节点压力:松树桥_水位
|
/// </summary>
|
public double TMethod12(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
if (paramArray[0]!=variable.ErrNum)
|
return paramArray[1]+paramArray[2]; else
|
|
return paramArray[3];
|
}
|
|
/// <summary>
|
/// 节点压力:松树桥_容积
|
/// </summary>
|
public double TMethod13(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]*(41.8*25.8*2);
|
}
|
|
/// <summary>
|
/// 节点需水量:梁坨三级需水量
|
/// </summary>
|
public double TMethod14(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 管线流量:梁沱三级→江茶三级_北辰名都
|
/// </summary>
|
public double TMethod15(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return 0;
|
}
|
|
/// <summary>
|
/// 管线流量:梁沱三级→江茶三级_麒麟公馆
|
/// </summary>
|
public double TMethod16(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return 0;
|
}
|
|
/// <summary>
|
/// 管线流量:梁沱三级→江茶三级_星光68
|
/// </summary>
|
public double TMethod17(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return 0;
|
}
|
|
/// <summary>
|
/// 管线流量:梁沱三级→江茶三级_其他
|
/// </summary>
|
public double TMethod18(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return 0;
|
}
|
|
/// <summary>
|
/// 管线流量:金紫山_进水量
|
/// </summary>
|
public double TMethod19(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]+paramArray[1]+paramArray[2]-paramArray[3]-paramArray[4]+paramArray[5];
|
}
|
|
/// <summary>
|
/// 节点压力:金紫山_水位变化
|
/// </summary>
|
public double TMethod20(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]/(20000/5)/4;
|
}
|
|
/// <summary>
|
/// 节点压力:金紫山_水位
|
/// </summary>
|
public double TMethod21(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
if (paramArray[0]!=variable.ErrNum)
|
return paramArray[1]+paramArray[2]; else
|
return paramArray[3];
|
|
}
|
|
/// <summary>
|
/// 节点压力:金紫山_容积
|
/// </summary>
|
public double TMethod22(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]*4000;
|
}
|
|
/// <summary>
|
/// 节点压力:梁坨系统_总容积
|
/// </summary>
|
public double TMethod23(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]+paramArray[1]+paramArray[2]+paramArray[3]+paramArray[4];
|
}
|
|
/// <summary>
|
/// 管线流量:南输管道Q2
|
/// </summary>
|
public double TMethod24(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]*1.1;
|
}
|
|
/// <summary>
|
/// 管线流量:南输管道川剧院
|
/// </summary>
|
public double TMethod25(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 管线流量:南输管道洋河北路
|
/// </summary>
|
public double TMethod26(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return 0;
|
|
}
|
|
/// <summary>
|
/// 管线流量:南输管道东部供水
|
/// </summary>
|
public double TMethod27(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 管线流量:南输管道一标段
|
/// </summary>
|
public double TMethod28(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]-paramArray[1]-paramArray[2];
|
}
|
|
/// <summary>
|
/// 节点需水量:江茶三级需水量
|
/// </summary>
|
public double TMethod29(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return 0;
|
}
|
|
/// <summary>
|
/// 管线流量:人和进水量
|
/// </summary>
|
public double TMethod30(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 管线流量:人和出水量
|
/// </summary>
|
public double TMethod31(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 节点压力:人和水位变化
|
/// </summary>
|
public double TMethod32(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return (paramArray[0]-paramArray[1])/(35*35*2)/4;
|
}
|
|
/// <summary>
|
/// 节点压力:人和水位
|
/// </summary>
|
public double TMethod33(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
if (paramArray[0]!=variable.ErrNum)
|
return paramArray[1]+paramArray[2]; else
|
return getAvg(paramArray[3],paramArray[4]);
|
|
}
|
|
/// <summary>
|
/// 节点压力:人和容积
|
/// </summary>
|
public double TMethod34(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]*35*35*2;
|
}
|
|
/// <summary>
|
/// 节点压力:人和四级调水人和减压
|
/// </summary>
|
public double TMethod35(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return 0;
|
}
|
|
/// <summary>
|
/// 节点压力:人和四级调水鸳鸯减压
|
/// </summary>
|
public double TMethod36(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return 0;
|
}
|
|
/// <summary>
|
/// 管线流量:鸳鸯进水量
|
/// </summary>
|
public double TMethod37(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]-paramArray[1]+paramArray[2]-paramArray[3];
|
}
|
|
/// <summary>
|
/// 管线流量:鸳鸯出水量
|
/// </summary>
|
public double TMethod38(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 节点压力:鸳鸯水位变化
|
/// </summary>
|
public double TMethod39(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return (paramArray[0]-paramArray[1])/(38*30*2)/4;
|
}
|
|
/// <summary>
|
/// 节点压力:鸳鸯水位
|
/// </summary>
|
public double TMethod40(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
if (paramArray[0]!=variable.ErrNum)
|
return paramArray[1]+paramArray[2]; else
|
return paramArray[3];
|
|
}
|
|
/// <summary>
|
/// 节点压力:鸳鸯容积
|
/// </summary>
|
public double TMethod41(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]*38*30*2;
|
}
|
|
/// <summary>
|
/// 节点需水量:人和四级需水量
|
/// </summary>
|
public double TMethod42(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 节点压力:梁坨目标
|
/// </summary>
|
public double TMethod43(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
|
|
if (param.Period>48) return 0;
|
return paramArray[0]+paramArray[1]+paramArray[2]+paramArray[3]+paramArray[4]+paramArray[5]+paramArray[6];
|
|
}
|
|
/// <summary>
|
/// 节点压力:兰家院子_水位_参考
|
/// </summary>
|
public double TMethod44(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return getAvg(paramArray[0],paramArray[1]);
|
}
|
|
/// <summary>
|
/// 节点压力:兰家院子_容积_参考
|
/// </summary>
|
public double TMethod45(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]*(35*35*2);
|
}
|
|
/// <summary>
|
/// 节点压力:松树桥_水位_参考
|
/// </summary>
|
public double TMethod46(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 节点压力:松树桥_容积_参考
|
/// </summary>
|
public double TMethod47(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]*(41.8*25.8*2);
|
}
|
|
/// <summary>
|
/// 节点压力:金紫山_水位_参考
|
/// </summary>
|
public double TMethod48(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 节点压力:金紫山_容积_参考
|
/// </summary>
|
public double TMethod49(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]*4000;
|
}
|
|
/// <summary>
|
/// 节点压力:人和水位_参考
|
/// </summary>
|
public double TMethod50(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return getAvg(paramArray[0],paramArray[1]);
|
}
|
|
/// <summary>
|
/// 节点压力:人和容积_参考
|
/// </summary>
|
public double TMethod51(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]*35*35*2;
|
}
|
|
/// <summary>
|
/// 节点压力:鸳鸯水位_参考
|
/// </summary>
|
public double TMethod52(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 节点压力:鸳鸯容积_参考
|
/// </summary>
|
public double TMethod53(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]*38*30*2;
|
}
|
|
/// <summary>
|
/// 节点压力:梁坨系统_总容积_参考
|
/// </summary>
|
public double TMethod54(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0]+paramArray[1]+paramArray[2]+paramArray[3]+paramArray[4];
|
}
|
|
/// <summary>
|
/// 节点压力:权重_容积
|
/// </summary>
|
public double TMethod55(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
int Period = param.Period;
|
if (Period>48) return 0;
|
|
if (45<=Period && Period<=48)
|
return 500;
|
else
|
return 30;
|
}
|
|
/// <summary>
|
/// 节点压力:损失函数_容积
|
/// </summary>
|
public double TMethod56(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
|
|
double lt_qz1 = paramArray[0];
|
|
double lt_delta = (Math.Abs(paramArray[1]- paramArray[2]))/paramArray[3];
|
|
double score1 = lt_delta * lt_qz1;
|
|
return score1;
|
}
|
|
/// <summary>
|
/// 节点压力:损失函数_兰家水位
|
/// </summary>
|
public double TMethod57(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
|
|
double level = paramArray[0];
|
|
double level_CK = paramArray[1];
|
|
|
double level_down2 = 0.6;
|
double level_up2 = 4;
|
|
double delta = 0.3;
|
|
|
|
double lt_qz1 = paramArray[2];
|
|
|
double level_down1 = level_down2+ delta;
|
|
double level_up1 = level_up2 + delta;
|
|
|
|
|
double lt_delta = 0;
|
if (level_CK>0)lt_delta= (Math.Abs(level- level_CK))/level_CK;
|
|
double score1 = lt_delta * lt_qz1;
|
|
|
double qz_level = paramArray[3];
|
|
double score2 = 0;
|
|
if (level<level_down2)
|
{
|
score2 = 10000+(level_down2-level)*2000;
|
}
|
else if (level_up2 <level)
|
{
|
score2 = 10000+(level-level_up2)*2000;
|
}
|
else if (level<level_down1)
|
{
|
score2 = (level_down1-level)*qz_level;
|
}
|
else if (level_up1<level)
|
{
|
score2 = (level_down1-level)*qz_level;
|
}
|
|
return score1 + score2;
|
}
|
|
/// <summary>
|
/// 节点压力:损失函数_松树桥
|
/// </summary>
|
public double TMethod58(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
|
|
double level = paramArray[0];
|
|
double level_CK = paramArray[1];
|
|
|
double level_down2 = 0.5;
|
double level_up2 = 4.4;
|
|
double delta = 0.3;
|
|
|
|
double lt_qz1 = paramArray[2];
|
|
|
double level_down1 = level_down2+ delta;
|
|
double level_up1 = level_up2 + delta;
|
|
|
if (level_CK==0) level_CK=1;
|
|
|
double lt_delta = (Math.Abs(level- level_CK))/level_CK;
|
|
double score1 = lt_delta * lt_qz1;
|
|
|
double qz_level = paramArray[3];
|
|
double score2 = 0;
|
|
if (level<level_down2)
|
{
|
score2 = 10000+(level_down2-level)*2000;
|
}
|
else if (level_up2 <level)
|
{
|
score2 = 10000+(level-level_up2)*2000;
|
}
|
else if (level<level_down1)
|
{
|
score2 = (level_down1-level)*qz_level;
|
}
|
else if (level_up1<level)
|
{
|
score2 = (level_down1-level)*qz_level;
|
}
|
|
return score1 + score2;
|
}
|
|
/// <summary>
|
/// 节点压力:超出推荐水位的权重
|
/// </summary>
|
public double TMethod59(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return 100;
|
}
|
|
/// <summary>
|
/// 节点压力:与参考水位变化的权重
|
/// </summary>
|
public double TMethod60(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return 10;
|
}
|
|
/// <summary>
|
/// 节点压力:损失函数_金紫山
|
/// </summary>
|
public double TMethod61(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
|
|
double level = paramArray[0];
|
|
double level_CK = paramArray[1];
|
|
|
double level_down2 = 0.3;
|
double level_up2 = 4.8;
|
|
double delta = 0.3;
|
|
|
|
double lt_qz1 = paramArray[2];
|
|
|
double level_down1 = level_down2+ delta;
|
|
double level_up1 = level_up2 + delta;
|
|
|
|
|
double lt_delta = (Math.Abs(level- level_CK))/level_CK;
|
|
double score1 = lt_delta * lt_qz1;
|
|
|
double qz_level = paramArray[3];
|
|
double score2 = 0;
|
|
if (level<level_down2)
|
{
|
score2 = 10000+(level_down2-level)*2000;
|
}
|
else if (level_up2 <level)
|
{
|
score2 = 10000+(level-level_up2)*2000;
|
}
|
else if (level<level_down1)
|
{
|
score2 = (level_down1-level)*qz_level;
|
}
|
else if (level_up1<level)
|
{
|
score2 = (level_down1-level)*qz_level;
|
}
|
|
return score1 + score2;
|
}
|
|
/// <summary>
|
/// 节点压力:损失函数_人和
|
/// </summary>
|
public double TMethod62(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
|
|
double level = paramArray[0];
|
|
double level_CK = paramArray[1];
|
|
|
double level_down2 = 0.5;
|
double level_up2 = 4;
|
|
double delta = 0.3;
|
|
|
|
double lt_qz1 = paramArray[2];
|
|
|
double level_down1 = level_down2+ delta;
|
|
double level_up1 = level_up2 + delta;
|
|
|
|
|
double lt_delta = (Math.Abs(level- level_CK))/level_CK;
|
|
double score1 = lt_delta * lt_qz1;
|
|
|
double qz_level = paramArray[3];
|
|
double score2 = 0;
|
|
if (level<level_down2)
|
{
|
score2 = 10000+(level_down2-level)*2000;
|
}
|
else if (level_up2 <level)
|
{
|
score2 = 10000+(level-level_up2)*2000;
|
}
|
else if (level<level_down1)
|
{
|
score2 = (level_down1-level)*qz_level;
|
}
|
else if (level_up1<level)
|
{
|
score2 = (level_down1-level)*qz_level;
|
}
|
|
return score1 + score2;
|
}
|
|
/// <summary>
|
/// 节点压力:损失函数_鸳鸯
|
/// </summary>
|
public double TMethod63(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
|
|
double level = paramArray[0];
|
|
double level_CK = paramArray[1];
|
|
|
double level_down2 = 0.6;
|
double level_up2 = 4.2;
|
|
double delta = 0.3;
|
|
|
|
double lt_qz1 = paramArray[2];
|
|
|
double level_down1 = level_down2+ delta;
|
|
double level_up1 = level_up2 + delta;
|
|
|
|
|
double lt_delta = (Math.Abs(level- level_CK))/level_CK;
|
|
double score1 = lt_delta * lt_qz1;
|
|
|
double qz_level = paramArray[3];
|
|
double score2 = 0;
|
|
if (level<level_down2)
|
{
|
score2 = 10000+(level_down2-level)*2000;
|
}
|
else if (level_up2 <level)
|
{
|
score2 = 10000+(level-level_up2)*2000;
|
}
|
else if (level<level_down1)
|
{
|
score2 = (level_down1-level)*qz_level;
|
}
|
else if (level_up1<level)
|
{
|
score2 = (level_down1-level)*qz_level;
|
}
|
|
return score1 + score2;
|
}
|
|
/// <summary>
|
/// 计算前处理:计算前处理
|
/// </summary>
|
public double TMethod64(LogicModelParams param, WdnmoParam wParam,GeneticParams gParam,calcParam cParam)
|
{
|
for (int x = 0; x < tags.Count; x++)
|
{
|
if (ts[x]<0) continue;
|
var v0 = param.dict_Tag[tags[x] + "_1"];
|
var v1 = param.dict_Tag[tags[x]];
|
var num = v0.LogicValues.Length;
|
var newArr = new double[num];
|
for (int i = 0; i < num; i++)
|
{
|
newArr[i] = v0.LogicValues[i];
|
}
|
v1.LogicValues = newArr;
|
}
|
for (int x = 0; x < tags.Count; x++)
|
{
|
if (ts[x]<0) continue;
|
var v0 = param.dict_Tag[tags[x] + "_1"];
|
var v1 = param.dict_Tag[tags[x]];
|
var v = param.dict_Tag[tags_trial[x]];
|
var t = ts[x];
|
int delta = (int)Math.Round(v.Values[0]);
|
var num = v0.LogicValues.Length;
|
if (delta > 0)
|
{
|
// 调整循环以对前后1位进行更改
|
for (int j = delta + 1; j >=0; j--)
|
{
|
var k = t + j;
|
if (k>=num) continue;
|
if (k-1<0) continue;
|
var m = t-1<0?0:t-1;
|
var m1 = k-delta;
|
m1 = m1<0?0:m1;
|
if (j<=delta-2)
|
{
|
v1.LogicValues[k] = v1.LogicValues[m];
|
}
|
else
|
{
|
v1.LogicValues[k] = v1.LogicValues[m1];
|
}
|
|
|
}
|
}
|
else if (delta < 0)
|
{
|
// 调整循环以对前后1位进行更改
|
for (int j = delta-1; j <=0 ; j++)
|
{
|
var k = t + j;
|
if (k+1>=num) continue;
|
if (k<0) continue;
|
var m = t+1>num-1?num-1:t+1;
|
var m1 = k-delta;
|
m1 = m1>num-1?num-1:m1;
|
if (j>=delta+2)
|
{
|
v1.LogicValues[k] = v1.LogicValues[m];
|
}
|
else
|
{
|
v1.LogicValues[k] = v1.LogicValues[m1];
|
}
|
|
}
|
}
|
|
//v1.LogicValues = newArr;
|
}
|
for (int x = 0; x < tags_UpDw.Count; x++)
|
{
|
if (!param.dict_Tag.ContainsKey(tags_trial_UpDw[x])) continue;
|
var v0 = param.dict_Tag[tags_UpDw[x] + "_1"];
|
var v1 = param.dict_Tag[tags_UpDw[x]];
|
var v = param.dict_Tag[tags_trial_UpDw[x]];
|
var vt = param.dict_Tag[tags_trial_Length[x]];
|
var delta = v.Values[0];
|
int timeLength = (int)vt.Values[0];
|
|
var time_arr = times_UpDw[x].Split(':');
|
var hour = int.Parse(time_arr[0]);
|
var min = int.Parse(time_arr[1]);
|
var t = (hour * 60 + min) / 15 - startTime;
|
var num = v1.LogicValues.Length;
|
|
var newArr0 = new double[num];
|
if (!tags.Contains(tags_UpDw[x]))
|
{
|
for (int i = 0; i < num; i++)
|
{
|
newArr0[i] = v0.LogicValues[i];
|
}
|
v1.LogicValues = newArr0;
|
|
}
|
var newArr = new double[num];
|
for (int i = 0; i < num; i++)
|
{
|
newArr[i] = v1.LogicValues[i];
|
}
|
for (int k=t;k<t+timeLength;k++)
|
{
|
if (k>=0 && k<v1.LogicValues.Length)
|
{
|
newArr[k]=newArr[k]+delta;
|
|
}
|
}
|
v1.LogicValues = newArr;
|
|
|
}
|
return 0;
|
}
|
|
/// <summary>
|
/// 管线流量:南输管道Q1
|
/// </summary>
|
public double TMethod65(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 节点压力:古木峰水位
|
/// </summary>
|
public double TMethod66(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
if (paramArray[0]!=variable.ErrNum)
|
return paramArray[1]+paramArray[2]; else
|
return paramArray[3];
|
}
|
|
/// <summary>
|
/// 节点压力:古木峰水位_1
|
/// </summary>
|
public double TMethod67(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return paramArray[0];
|
}
|
|
/// <summary>
|
/// 节点压力:古木峰水位变化
|
/// </summary>
|
public double TMethod68(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
return (paramArray[0]-paramArray[1])/2150/4;
|
}
|
|
/// <summary>
|
/// 节点压力:损失函数_古木峰
|
/// </summary>
|
public double TMethod69(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
|
|
double level = paramArray[0];
|
|
double level_CK = paramArray[1];
|
|
|
double level_down2 = 1;
|
double level_up2 = 6;
|
|
double delta = 0.3;
|
|
|
|
double lt_qz1 = paramArray[2];
|
|
|
double level_down1 = level_down2+ delta;
|
|
double level_up1 = level_up2 + delta;
|
|
|
|
|
double lt_delta = (Math.Abs(level- level_CK))/level_CK;
|
|
double score1 = lt_delta * lt_qz1;
|
|
|
double qz_level = paramArray[3];
|
|
double score2 = 0;
|
|
if (level<level_down2)
|
{
|
score2 = 10000+(level_down2-level)*2000;
|
}
|
else if (level_up2 <level)
|
{
|
score2 = 10000+(level-level_up2)*2000;
|
}
|
else if (level<level_down1)
|
{
|
score2 = (level_down1-level)*qz_level;
|
}
|
else if (level_up1<level)
|
{
|
score2 = (level_down1-level)*qz_level;
|
}
|
|
return score1 + score2;
|
}
|
|
/// <summary>
|
/// 管线流量:金紫山_进水量_1
|
/// </summary>
|
public double TMethod70(List<double> paramArray,List<double[]> patternArray,LogicModelParams param=null,GeneticParams gParam=null)
|
{
|
double value=(paramArray[0]-paramArray[1])*(20000/5)*4;
|
if (Math.Abs(value)>100000) return 0 ;
|
else return value;
|
}
|
|
/// <summary>
|
/// 初始化:确定调泵时间点ts
|
/// </summary>
|
public double TMethod71(LogicModelParams param, WdnmoParam wParam,GeneticParams gParam,calcParam cParam)
|
{
|
int num = tags.Count;
|
int pCount = gParam.GlobalConfig.Ext.PeriodCount;
|
startTime = wParam.time.Hour * 60 / 15 + wParam.time.Minute; gParam.GlobalConfig.Ext.TimeStart= startTime*15;
|
for (int x = 0; x < num; x++)
|
{
|
if (!param.dict_Tag.ContainsKey(tags_trial[x]))
|
{
|
num -= 1;
|
tags.RemoveAt(x);
|
tags_trial.RemoveAt(x);
|
x -= 1;
|
}
|
}
|
|
foreach (var kp in dict_水泵映射表)
|
{
|
var tag=kp.Key;
|
var list_pump = dict_水泵映射表[tag];
|
List<double[]> list_doubles=new List<double[]>();
|
for(int i=0;i<list_pump.Count;i++)
|
{
|
var pattern = new double[pCount];
|
|
var p1 = wParam.ScadaPoints.Find(p => p.Key == list_pump[i]).Pattern;
|
for (int j=0;j<Math.Min(pCount,p1.Length);j++)
|
{
|
pattern[j]=p1[j];
|
}
|
list_doubles.Add(pattern);
|
}
|
for(int i=1;i< list_doubles[0].Length;i++)
|
{
|
bool flag=true;
|
for(int j=0;j< list_doubles.Count;j++)
|
{
|
if (list_doubles[j][i] != list_doubles[j][i-1])
|
{
|
flag=false;
|
break;
|
}
|
}
|
if (!flag)
|
{
|
if (!dict_变化时间点.ContainsKey(tag)) dict_变化时间点[tag] = new List<int>();
|
dict_变化时间点[tag].Add(i);
|
}
|
}
|
}
|
for (int x=0;x<num;x++)
|
{
|
var tag = tags[x];
|
if (!dict_水泵映射表.ContainsKey(tag))
|
{
|
if (dict_变化时间点.ContainsKey(tag))continue;
|
var deltaLimit = dict_进水限制对应关系[tag];
|
var v0 = param.dict_Tag[tag + "_1"];//原始
|
var v1 = param.dict_Tag[tag];//方案
|
var values = v0.LogicValues;
|
for (int i=0;i<values.Length-2;i++)
|
{
|
var value0 = values[i];
|
var value1 = values[i+1];
|
var value2 = values[i+2];
|
if (Math.Abs(value0-value1)+Math.Abs(value1-value2)>deltaLimit)
|
{
|
if (!dict_变化时间点.ContainsKey(tag)) dict_变化时间点[tag] = new List<int>();
|
dict_变化时间点[tag].Add(i+1);
|
i+=2;
|
}
|
}
|
}
|
}
|
string lastTag = null;
|
int lastIndexInGroup = -1;
|
//建立ts数组,根据dict_变化时间点,确定ts数组
|
for (int x=0;x<num;x++)
|
{
|
var tag = tags[x];
|
if (!param.dict_Tag.ContainsKey(tags_trial[x]))
|
{
|
num -= 1;
|
tags.RemoveAt(x);
|
tags_trial.RemoveAt(x);
|
x -= 1;
|
continue;
|
}
|
var v = param.dict_Tag[tags_trial[x]];
|
if (tag!=lastTag)
|
{
|
if (lastTag!=null&& dict_变化时间点.ContainsKey(lastTag) && lastIndexInGroup < dict_变化时间点[lastTag].Count-1)
|
{
|
//试算变量的数量不够
|
wParam.ErrorMessage = "试算变量["+ lastTag + "]的数量不够,至少需要["+ dict_变化时间点[lastTag].Count + "]个";
|
return -1;
|
}
|
lastIndexInGroup = -1;
|
}
|
|
int indexInGroup = lastIndexInGroup + 1;
|
lastTag = tag;
|
lastIndexInGroup = indexInGroup;
|
|
if (!dict_变化时间点.ContainsKey(tag) || indexInGroup>=dict_变化时间点[tag].Count)
|
{
|
num -= 1;
|
tags.RemoveAt(x);
|
tags_trial.RemoveAt(x);
|
x -= 1;
|
param.试算变量.Remove(v);
|
continue;
|
}
|
ts.Add(dict_变化时间点[tag][indexInGroup]);
|
var v0 = param.dict_Tag[tags[x] + "_1"];
|
var v1 = param.dict_Tag[tags[x]];
|
|
//var time_arr = times[x].Split(':');
|
//var hour = int.Parse(time_arr[0]);
|
//var min = int.Parse(time_arr[1]);
|
//var t = (hour * 60 + min) / 15 - startTime;
|
var vs = v0.LogicValues;
|
|
|
//开始时间为19:00,每15分钟一个时间点,所以t_final=19*60/15+t,计算最终的时间格式
|
DateTime dt = wParam.time;
|
DateTime newdt = dt.AddMinutes(ts[x] * 15);
|
//如果newdt的时间大于24:00,则减去24小时
|
int h = (newdt.Date > dt.Date ? newdt.Hour + 24 : newdt.Hour);
|
|
v.modelObjectID = h.ToString("00") + ":" + newdt.ToString("mm");
|
if (v.doubleRange.Min + ts[x] < 0) v.doubleRange.Min = -ts[x];
|
if (v.doubleRange.Max + ts[x] > pCount - 1) v.doubleRange.Max = pCount - 1 - ts[x];
|
|
|
}
|
num = param.试算变量.Count;
|
|
for (int i=0;i<num;i++)
|
{
|
var v = param.试算变量[i];
|
if (!tags_trial.Contains(v.Tag) && !tags_trial_UpDw.Contains(v.Tag) && !tags_trial_Length.Contains(v.Tag) && !tags_trial_QZ.Contains(v.Tag))
|
{
|
param.试算变量.RemoveAt(i);
|
i--;
|
num--;
|
}
|
|
}
|
|
num = tags.Count;
|
for(int x=0;x<num;x++)
|
{
|
var v = param.dict_Tag[tags_trial[x]];
|
int index = param.试算变量.FindIndex(vv => vv.ID == v.ID);
|
getXbyI.Add(index,x);
|
getIbyX.Add(x,index);
|
list_isNeedCheckbyI.Add(index,x > 0 && tags[x] == tags[x - 1]);
|
}
|
|
//在param.试算变量中,删除tags_trial里不存在的试算变量
|
//num= param.试算变量.Count;
|
//for (int i = 0; i < num; i++)
|
//{
|
// if (!tags_trial.Contains(param.试算变量[i].Tag))
|
// {
|
// param.试算变量.RemoveAt(i);
|
// i -= 1;
|
// num -= 1;
|
// }
|
//}
|
|
|
param.buildDict();
|
|
|
|
|
return 0;
|
}
|
|
|
double GetDelta(double[] vs,int t)
|
{
|
//计算前后2个时间点的差值
|
double delta0 = 0;
|
if (t - 2 >= 0) delta0 = Math.Abs(vs[t - 2] - vs[t-1]);
|
double delta1 = 0;
|
if (t-1 >= 0 ) delta1=Math.Abs(vs[t-1]-vs[t]);
|
double delta2 = 0;
|
if (t + 1 <vs.Length) delta2=Math.Abs(vs[t+1]-vs[t]);
|
double delta3 = 0;
|
if (t + 2 < vs.Length) delta3 = Math.Abs(vs[t + 2] - vs[t+1]);
|
var sum =delta0+ delta1+delta2+delta3;
|
return sum;
|
}
|
|
|
|
/// <summary>
|
/// 初始传参:预配置
|
/// </summary>
|
public double TMethod72(LogicModelParams param, WdnmoParam wParam,GeneticParams gParam,calcParam cParam)
|
{
|
return 0;
|
}
|
List<string> tags = new List<string> { "Tag_TLSC_A","Tag_TLSC_A","Tag_TLSC_A","Tag_TLSC_A","Tag_TLSC_A","Tag_TLSC_B","Tag_TLSC_B","Tag_TLSC_B","Tag_TLSC_B","Tag_TLSC_B","Tag_AP3","Tag_AP3","Tag_AP3","Tag_AP3","Tag_AQ3","Tag_AQ3","Tag_AQ3","Tag_AQ3","Tag_AQ3","Tag_AB3","Tag_AB3","Tag_AB3","Tag_AB3","Tag_AR3","Tag_AR3","Tag_AR3","Tag_AR3","Tag_R3","Tag_R3"};
|
|
List<string> tags_trial = new List<string> { "SS_B3","SS_B3_1","SS_B3_2","SS_B3_3","SS_B3_4","SS_C3","SS_C3_1","SS_C3_2","SS_C3_3","SS_C3_4","SS_G3","SS_G3_1","SS_G3_2","SS_G3_3","SS_L3","SS_L3_1","SS_L3_2","SS_L3_3","SS_L3_4","SS_AG3","SS_AG3_1","SS_AG3_2","SS_AG3_3","SS_RHJS","SS_RHJS_1","SS_RHJS_2","SS_RHJS_3","SS_GMFQ1","SS_GMFQ1_1"};
|
Dictionary<string, int> dict_进水限制对应关系=new Dictionary<string, int>(){
|
{"Tag_AR3",1000},
|
{"Tag_R3",1000}
|
};
|
|
Dictionary<string, List<int>> dict_变化时间点 = new Dictionary<string, List<int>>();
|
Dictionary<string, List<string>> dict_水泵映射表 = new Dictionary<string, List<string>>(){
|
{ "Tag_TLSC_B",new List<string>() { "Scada_613","Scada_615","Scada_616","Scada_617"}},
|
{ "Tag_TLSC_A",new List<string>() { "Scada_614","Scada_618","Scada_619","Scada_620"}},
|
{ "Tag_AQ3",new List<string>() { "Scada_631","Scada_632","Scada_633","Scada_634","Scada_635","Scada_636"}},
|
{ "Tag_AP3",new List<string>() { "Scada_642","Scada_643","Scada_644","Scada_645","Scada_646","Scada_647"}},
|
{ "Tag_AB3",new List<string>() { "Scada_653","Scada_654","Scada_655","Scada_656","Scada_657","Scada_658"}},
|
{ "Tag_W3",new List<string>() { "Scada_664","Scada_665","Scada_666"}},
|
};
|
List<string> tags_UpDw = new List<string>{"Tag_AR3","Tag_R3","Tag_R3"};
|
List<string> times_UpDw = new List<string>{"19:30","19:00","24:00"};
|
List<string> tags_trial_UpDw = new List<string>{"SS_RHJSTJ","SS_Q1LL","SS_Q1LL_1"};
|
List<string> tags_trial_Length = new List<string>{"SS_RHJSTJ_SC","SS_Q1LL_Time","SS_Q1LL_Time_1"};
|
List<string> tags_trial_QZ = new List<string>{};
|
List<int> ts=new List<int>();
|
Dictionary<int,int> getXbyI=new Dictionary<int,int>();
|
Dictionary<int,int> getIbyX=new Dictionary<int,int>();
|
Dictionary<int,bool> list_isNeedCheckbyI= new Dictionary<int,bool> ();
|
int startTime = 0;
|
|
|
/// <summary>
|
/// 基因筛选器:基因筛选器
|
/// </summary>
|
public double TMethod73(LogicModelParams param, WdnmoParam wParam,GeneticParams gParam,calcParam cParam)
|
{
|
int index = cParam.CurrentIndex;
|
if (!getXbyI.ContainsKey(index)) return 0;
|
int x = getXbyI[index];
|
if ( list_isNeedCheckbyI[index])
|
{
|
int y = x-1;
|
int index_y = getIbyX[y];
|
int delta_x = (int)cParam.vars[index];
|
int delta_y = (int)cParam.vars[index_y];
|
if(ts[y]+delta_y> ts[x] + delta_x-1)
|
return -1;
|
}
|
return 0;
|
|
|
}
|
|
/// <summary>
|
/// 方案筛选器:方案筛选器
|
/// </summary>
|
public double TMethod74(LogicModelParams param, WdnmoParam wParam,GeneticParams gParam,calcParam cParam)
|
{
|
var num = cParam.vars.Length;
|
for (int i=0;i<num;i++)
|
{
|
if (list_isNeedCheckbyI.ContainsKey(i) && list_isNeedCheckbyI[i])
|
{
|
int x = getXbyI[i];
|
int y = x-1;
|
int index_y = getIbyX[y];
|
int delta_x = (int)cParam.vars[i];
|
int delta_y = (int)cParam.vars[index_y];
|
if(ts[y]+delta_y> ts[x] + delta_x-1)
|
return -1;
|
}
|
}
|
return 0;
|
}
|
|
/// <summary>
|
/// 初始传参:计算平均值
|
/// </summary>
|
public double TMethod75(LogicModelParams param, WdnmoParam wParam,GeneticParams gParam,calcParam cParam)
|
{
|
return 0;
|
}
|
double getAvg(double a,double b)
|
{
|
var l1 = a;
|
var l2 = b;
|
int Count = 0;
|
double Sum = 0;
|
if (l1!=0)
|
{
|
Count++;
|
Sum+=l1;
|
}
|
if (l2!=0)
|
{
|
Count++;
|
Sum+=l2;
|
}
|
var avg = Sum/Count;
|
return avg;
|
}
|
|
|
/// <summary>
|
/// 输出计算处理:输出计算处理
|
/// </summary>
|
public double TMethod76(LogicModelParams param, WdnmoParam wParam,GeneticParams gParam,calcParam cParam)
|
{
|
for (int x = 0; x < tags.Count; x++)
|
{
|
if (ts[x]<0) continue;
|
if (!dict_水泵映射表.ContainsKey(tags[x])) continue;
|
var pumps = dict_水泵映射表[tags[x]];
|
for (int y=0;y<pumps.Count;y++)
|
{
|
var tag = pumps[y];
|
var v0 = param.dict_Tag[tag + "_1"];
|
var v1 = param.dict_Tag[tag];
|
var num = v0.LogicValues.Length;
|
var newArr = new double[num];
|
for (int i = 0; i < num; i++)
|
{
|
newArr[i] = v0.LogicValues[i];
|
}
|
v1.LogicValues = newArr;
|
}
|
|
}
|
|
for (int x = 0; x < tags.Count; x++)
|
{
|
if (ts[x]<0) continue;
|
if (!dict_水泵映射表.ContainsKey(tags[x])) continue;
|
var pumps = dict_水泵映射表[tags[x]];
|
for (int y=0;y<pumps.Count;y++)
|
{
|
var tag = pumps[y];
|
var v0 = param.dict_Tag[tag + "_1"];
|
var v1 = param.dict_Tag[tag];
|
var v = param.dict_Tag[tags_trial[x]];
|
var t = ts[x];
|
int delta = (int)Math.Round(v.Values[0]);
|
var num = v0.LogicValues.Length;
|
|
|
|
if (delta > 0)
|
{
|
// 调整循环以对前后1位进行更改
|
for (int j = -1; j <= delta + 1; j++)
|
{
|
var k = t + j;
|
// 调整为只考虑前1位
|
var t2 = Math.Max(0, t - 1);
|
if (0 <= k && k < num)
|
{
|
// 调整条件以反映新范围
|
if (j > delta - 1)
|
{
|
// 调整计算以匹配新逻辑
|
var t1 = t + j - (delta);
|
if (t1 < 0) t1 = 0;
|
if (t1 > num - 1) t1 = num - 1;
|
v1.LogicValues[k] = v1.LogicValues[t1];
|
}
|
else
|
v1.LogicValues[k] = v1.LogicValues[t2];
|
}
|
}
|
}
|
else if (delta < 0)
|
{
|
// 调整循环以对前后1位进行更改
|
for (int j = 1; j >= delta-1 ; j--)
|
{
|
var k = t + j;
|
// 调整为只考虑后1位
|
var t2 = Math.Min(num - 1, t + 1);
|
if (0 <= k && k < num)
|
{
|
// 调整条件以反映新范围
|
if (j < delta + 1)
|
{
|
// 调整计算以匹配新逻辑
|
var t1 = t - (delta) + j;
|
if (t1 < 0) t1 = 0;
|
if (t1 > num - 1) t1 = num - 1;
|
v1.LogicValues[k] = v1.LogicValues[t1];
|
}
|
else
|
v1.LogicValues[k] = v1.LogicValues[t2];
|
}
|
}
|
}
|
}
|
|
|
//v1.LogicValues = newArr;
|
}
|
|
return 0;
|
}
|
}
|
}
|