2.5 AOE动作类型
动作指一个复杂的控制策略所细分出来的步骤,在AOE中表现为节点之间的有向边。当首节点所表示的事件被触发后,则按照节点事件中所定义的规则,对应的动作(边)将被执行。
按照不同的动作内容,AOE动作可分为以下几类。
动作类型 | 动作名称 | 含义 |
---|---|---|
None | 无动作 | 不进行任何动作 |
SET_POINTS | 置点 | 对测点和变量赋值 |
SET_POINTS_WITH_CHECK | 带检查的置点 | 对测点和变量赋值并等待测点值和置点命令一致 |
SET_POINTS2 | 支持向量计算的置点 | 对测点和变量赋值(支持向量计算) |
SET_POINTS_WITH_CHECK2 | 支持向量计算的带检查置点 | 对测点和变量赋值并等待测点值和置点命令一致(支持向量计算) |
Solve | 线性方程组求解 | 对线性方程组进行求解 |
NLSOLVE | 非线性方程组求解 | 对非线性方程组进行求解 |
MILP | 混合整数线性规划(稀疏) | 稀疏描述的混合整数线性规划问题求解 |
SimpleMILP | 混合整数线性规划(稠密) | 稠密描述的混合整数线性规划问题求解 |
NLP | 非线性规划 | 非线性规划问题求解 |
具体的配置格式详见AOE策略文件配置。
AOE各动作的具体含义和注意事项如下:
None(无动作)
无动作即控制器不执行任何动作,该节点事件被触发后,直接进入下一节点事件的等待触发状态。
SET_POINTS(置点)
置点动作可以进行测点的赋值,测点即指测点配置文件中用户已定义的对象;也可以进行变量的定义,此处的变量指本控制策略中涉及到的非测点对象,可用于定义控制过程中出现的数学计算式、声明物理意义的中间变量、为减少策略撰写工作量而对表达式整体标识一个别名等等。
置点动作可以直接赋值或赋予表达式,测点或已定义的变量可用于定义新变量。赋值对象的类型可以为数字量或者模拟量。
SET_POINTS_WITH_CHECK(带检查的置点)
主要置点功能与Set_Points一样,区别在于该动作指向的节点(事件)会等待测点值和置点命令一致(整型的指令一样,浮点数指令和测点值相差不超过1e-6)才算事件发生的条件之一,也就是说“指令生效 && 事件表达式结果 ”事件才算发生。
注意:SET_POINTS_WITH_CHECK动作指向的节点的超时时间要大于该测点采集时间,因为测点数据需下发后再采集才能进行“下发是否成功”的判断。
SET_POINTS2(支持向量计算的置点)
主要置点功能与Set_Points一样,区别在于该动作支持向量计算,向量计算格式要求如下:。
待赋值向量:向量计算表达式;
例:
[a1,a2]:([1,2]+[15,10])*10+[1,2]; %实现赋值a1=161,a2=122
注:
1.赋值号":"左右两侧向量维数需相同;
2.支持"+"、"-"、"*"混合运算,但目前不支持矩阵求逆等复杂计算;
3.该动作里向量元素可以为测点或变量,如“[a,b]:[1,2]”,这里a,b可以是测点或变量,如果a,b是变量,则它们的类型只能是浮点数,不能是张量;
4.该动作可以更新事先定义为向量类型的变量,比如定义变量c:[c1,c2,c3];d:[d1,d2,d3]。 则可通过该动作更新变量“c:[1,2,3];d:[3,3,4];”
5.可以定义变量 var=[a,b,c,d],其中a,b,c,d是测点或类型为浮点数的变量,然后在SET_POINTS2的动作里面可以使用“var:[1,3,4,5];”这种写法为a,b,c,d幅值。
SET_POINTS_WITH_CHECK2(支持向量计算的带检查置点)
主要置点功能与SET_POINTS_WITH_CHECK一样,区别在于该动作支持向量计算,该部分格式与SET_POINTS2相同。
Solve(线性方程组求解)
可求解线性方程组 Ax = b,其中 A 为系数矩阵,x 为未知数组成的向量,b 为常数项向量。
#1)方程组:#
<方程式1>;
<方程式2>;
...
#2)变量声明:#
<变量名1>,<变量名2>,...
NLSOLVE(非线性方程组求解)
可求解非线性方程组。
#1)方程组:#
<方程式1>;
<方程式2>;
...
#2)变量声明:#
<变量名1>,<变量名2>,...
注:为了使计算收敛,变量必要时需要赋初值,格式为<变量名:初值>;
MILP与SimpleMILP(混合整数线性规划)
此动作用于在给定可行域内,求解线性约束下线性目标函数的最优解及最优值。
MILP全称为Mixed-integer linear programming,即混合整数线性规划,指目标函数和约束条件均为线性,部分决策变量限制为整数的数学规划问题。具体来说,其约束条件支持等式约束及不等式约束;变量类型包括 0-1变量、整型变量、实数型变量。
在本控制器的动作设置中,MILP和SimpleMILP区别在于前者的约束为稀疏矩阵,即后者则为稠密矩阵。通常认为矩阵中非零元素的总数比上矩阵所有元素总数的值小于等于0.05时的矩阵为稀疏矩阵。
以混合整数线性规划(MILP)为例,其动作的设置参数包括:
#1)目标函数:#
min/max(<表达式>)
#2)约束条件:#
<bool表达式1>;
<bool表达式2>;
...
#3)变量声明:#
<变量名1>:<变量类型1>,
<变量名2>:<变量类型2>,
...
其中变量类型包括以下三类:
变量类型 | 含义 |
---|---|
1 | 0-1二进制变量 |
2 | 整型变量 |
3 | 实数型变量 |
实际列写时,按顺序写下目标函数、约束条件、变量声明的标准格式式子即可,上例中##
间的内容不必写入。具体例子详见微网储能削峰填谷——AOE边声明。
NLP(非线性规划)
此动作用于在给定可行域内,求解约束下目标函数的最优解及最优值,其中目标函数和约束条件至少有一个为非线性。
NLP全称为Nonlinear programming,即非线性规划,指目标函数和约束条件至少有一个为非线性的数学规划问题。具体来说,其约束条件支持等式约束及不等式约束;该动作变量类型为实数型变量。
#1)目标函数:#
<表达式>
#2)约束条件:#
<表达式1>:[表达式下限/表达式上限];
<表达式2>:[表达式下限/表达式上限];
...
#3)变量声明:#
<变量名1>:[变量下限/变量上限/初始值],
<变量名2>:[变量下限/变量上限/初始值],
...
注:
1.若无上下限对应位置不写,如x[/3]表示变量x≤3;
2.变量声明若无初始值要求,可简写为[变量下限/变量上限]。