12.25广义分布外检测学习/代码复现

12.25广义分布外检测学习/代码复现_第1张图片

A = model.getA().toarray()  #
b = np.array(model.RHS)
sense = np.array(model.sense)
f = np.array(model.obj)

12.25广义分布外检测学习/代码复现_第2张图片

Aineq = np.vstack((-Ale, Age))  # 把所有的<=和>=组合在一起
bineq = np.append(-ble, bge)  # 这里用append使bineq为一个一维矩阵,而不是2行1列的二维矩阵,避免后面的运行错误

12.25广义分布外检测学习/代码复现_第3张图片

 

 

for row in np.arange(Aineq.shape[0]):
    # 第一阶段变量
    if not np.all(Aineq[row][num_1:] == 0): #第一阶段独有约束
        E.append(Aineq[row][:num_1]) #x
        G.append(Aineq[row][num_1:num_1+num_2]) #y
        M.append(Aineq[row][num_1+num_2:]) #u
        h.append(bineq[row]) #b

根据您的代码片段,循环遍历了Aineq矩阵的每一行,并根据条件将其拆分成不同的部分,并将它们存储在不同的列表中。

E, G, M, h = [], [], [], []:这几行代码初始化了四个空列表,用于存储拆分后的约束部分。

for row in np.arange(Aineq.shape[0]):这行代码用于构建一个循环,在Aineq矩阵的每一行上进行迭代。

if not np.all(Aineq[row][num_1:] == 0):这行代码检查当前行是否包含第一阶段独有的约束。如果当前行的(num_1+1)列及以后的列都为0,则说明该行不包含第一阶段独有的约束。

E.append(Aineq[row][:num_1])、G.append(Aineq[row][num_1:num_1+num_2])、M.append(Aineq[row][num_1+num_2:])、h.append(bineq[row]):这几行代码将当前行的适当部分添加到相应的列表中。 E存储当前行从第一列到第num_1列的元素(第一阶段变量x的部分),G存储当前行从第num_1列到第num_1+num_2列的元素(第二阶段变量y的部分),M存储当前行从第num_1+num_2列之后的元素(辅助变量u的部分),h存储当前行的右侧约束值。

综合来说,这些代码片段的作用是将Aineq矩阵的每一行根据条件拆分成不同的部分,并将这些部分分别存储在列表E、G、M和h中,以便在后续处理中使用。

 12.25广义分布外检测学习/代码复现_第4张图片

12.25广义分布外检测学习/代码复现_第5张图片12.25广义分布外检测学习/代码复现_第6张图片12.25广义分布外检测学习/代码复现_第7张图片

12.25广义分布外检测学习/代码复现_第8张图片

 下面是一个简单的示例,演示了如何将非紧凑形式的约束转换为紧凑形式的约束,使用 Python 和 Gurobi 进行实现:

import gurobipy as gp
from gurobipy import GRB

# 创建模型
m = gp.Model("example")

# 创建变量
x = m.addVar(name="x")
y = m.addVar(name="y")

# 创建系数
a = 1
b = 2
c = 3

# 非紧凑形式的约束
m.addConstr(a * x + b * y >= c, "c1")

# 紧凑形式的约束
# 创建系数矩阵和变量向量
coefficients = [a, b]
variables = [x, y]
# 创建约束
m.addConstr(gp.LinExpr(coefficients, variables) >= c, "c2")

# 设置优化目标
m.setObjective(x + y, GRB.MAXIMIZE)

# 求解模型
m.optimize()

12.25广义分布外检测学习/代码复现_第9张图片

 非紧凑形式的约束到紧凑形式的约束python基于gurobi的代码实现:

import numpy as np
import cvxpy as cp

# 创建变量
x = cp.Variable()
y = cp.Variable()

# 创建系数
a = 1
b = 2
c = 3

# 非紧凑形式的约束
constraints = [a * x + b * y >= c]

# 紧凑形式的约束
# 创建系数向量和变量向量
coefficients = np.array([a, b])
variables = np.array([x, y])
# 创建约束
compact_constraint = coefficients @ variables >= c

# 创建问题
problem = cp.Problem(cp.Maximize(x + y), constraints + [compact_constraint])

# 求解问题
problem.solve()

12.25广义分布外检测学习/代码复现_第10张图片

你可能感兴趣的:(学习)