跳到主要内容

案例库推理案例

该模板对实时工况进行判断,并匹配期望工况的最近案例并输出

  1. 在算盘内搭建模板如图所示:

image.png

  1. 拖入数据处理组件,内部搭建如图所示:

image.png in1输入为历史数据集,用于训练
in2为模拟的实时数据
in3为输入的优化目标

  1. 历史数据集通过python脚本编辑器预处理,作为训练数据集存入全局变量

image.png 代码如下:

def run(in1 = None):
the1,the2=[0.25,0.5,0.75],[0.25,0.5,0.75]
indicators=['y1','y2']
max_len=1000
data_dict={}
d1=[-float('inf')]+the1+[float('inf')]
d2=[-float('inf')]+the2+[float('inf')]
data = in1
for i in range(len(the1)+1):
for j in range(len(the2)+1):
data_dict[(i,j)]=data[(data[indicators[0]]>d1[i]) & (data[indicators[0]]<d1[i+1]) & (data[indicators[1]]>d2[i]) & (data[indicators[1]]<d2[i+1])].iloc[-max_len:,:]
return data_dict
  1. in2输入,python脚本编辑器进行判断工况类别:

image.png 代码如下:

#判断当前工况类别
def run(in1 = None):
indicators=['y1','y2']
the1,the2=[0.25,0.5,0.75],[0.25,0.5,0.75]
test=in1
c0,c1=0,0
for i in the1:
if test[indicators[0]].values[0] > i:
c0+=1
else:
break
for i in the1:
if test[indicators[1]].values[0]>i:
c1+=1
else:
break
return [c0,c1]
  1. 判断是否更新数据

image.png 代码如下:

#判断是否更新数据
def run(in1 = None,in2 = None,in3 = None):
import pandas as pd
from scipy.spatial.distance import cdist
data_dict = in1
test = in3
threshold = 0.001
max_len = 1000
c0,c1 = in2[0],in2[1]
candidates=data_dict[(c0,c1)]
score=cdist(test.values,candidates.values).min()
if score> threshold:
data_dict[(c0,c1)]=pd.concat((data_dict[(c0,c1)],test)).iloc[-max_len:,:]
return data_dict

更新后的数据也会作为历史数据存入全局变量中。

  1. 判断工况类别:

image.png 代码如下:

#判断目标工况类别
def run(in1 = None,in2 = None):
indicators=['y1','y2']
the1,the2=[0.25,0.5,0.75],[0.25,0.5,0.75]
c0,c1 = in1[0],in1[1]
indicator= in2['indicator']
objective = in2['objective']

if indicator==indicators[0] and objective == 1:
t_c0,t_c1=min(len(the1),c0+1),c1
elif indicator==indicators[0] and objective != 1:
t_c0,t_c1=max(len(the1),c0-1),c1
elif indicator==indicators[1] and objective == 1:
t_c0,t_c1=c0,min(len(the2),c1+1)
elif indicator==indicators[1] and objective != 1:
t_c0,t_c1=c0,max(len(the2),c1-1)
return [t_c0,t_c1]
  1. 返回推荐结果:

image.png 代码如下:

#返回推荐结果
def run(in1 = None,in2 = None,in3 = None):
import pandas as pd
from scipy.spatial.distance import cdist
data_dict = in1
test = in2
candidates=data_dict[(in3[0],in3[1])]
row=cdist(test.values,candidates.values).argsort()[0][0]
item=candidates.iloc[[row],:]
return item
  1. 打开前面板,点击案例库生成上传历史数据,而后点击案例库推理,查看结果如图

image.png