gc_pwl。R


gc_pwl。R


# #最大化# sum c(j) *狗万app足彩 x(j) #服从# sum A(i,j) * x(j) <= 0, for i = 1,…, m #和y (j) < = 3 # y (j) = pwl (x (j)), j = 1,……, n # x(j) free, y(j) >= 0, for j = 1,…如果x = 0 # = 1+|x|,如果x != 0 # #注意# 1求和pwl(x(j)) <= b是约束x向量,也有利于稀疏x向量。#这里的b = 3意味着最多两个x(j)可以是非零的,如果是2,则# sum x(j) <= 1 # 2。Pwl (x)从1跳跃到0,从0跳跃到1,如果x从- 0移动到0,#然后移动到正0,所以我们需要在x = 0处有三个点。X在两边都有无限的界限#,用两点(- 1,2)和(0,1)定义的部分可以#扩展X到-∞。总体我们可以用5分(1、2),(0,1),#(0,0),(0,1)和(1、2)来定义y = pwl (x)图书馆(gurobi)图书馆(矩阵)n = 5 #一个x < = 0 < - rbind (c (0, 0, 0, 1, 1), c (0, 0, 1, 1, - 1), c (1, - 1, 0, 0, 1), c (1 0 1 0 1), c(1, 0, 0, 1, 1)) #和y (j) < = 3 y < - rbind (c (1, 1, 1, 1,1)) #初始化模型模型<- list() #约束矩阵模型一个<- bdiag(A, y) #右手边系数向量模型rhs <- c(rep(0, n), 3) #目标函数(任意选择x个系数)模型obj <- c(0.5, 0.8, 0.5, 0.1, -1, rep(0, n)) #这是一个最大化模型模型modelsense <- "max" # x和y模型的下界说明:lb <- c(rep(- inf, n), rep(0, n)) # PWL约束模型Genconpwl <- list() for (k in 1:n) {modelGenconpwl [[k]] < list()模型genconpwl [[k]]Xvar <- k模型genconpwl [[k]]Yvar <- n + k模型genconpwl [[k]]XPTS <- c(- 1,0,0,0,1)模型genconpwl [[k]]ypts <- c(2, 1, 0, 1, 2)} #显示x for (k in 1:n)的解的值print(sprintf('x(%d) = %g', k, result)sprintf('目标值:%g',结果objval)) #清除空间rm(模型,结果)