manbet体育手机客户端


genconstr。R


在这个例子中,我们展示了建模一些常见狗万app足彩表达式的通用约束的使用。我们使用作为一个例子一个sat问题#想看看是否可以满足至少四(或者全部)条款的逻辑# # # L = (x0或~ x1和x2)和(x1和x2 ~或x3)和# (x2 ~ x3或x0)和(x3 ~ x0或x1)和# (~ x0或~ x1和x2)和(~ ~ x1和x2或x3)和# (x2 ~ ~ x3或x0)和(~ x3 ~ x0或x1) # #我们这样做引入两个变量为每个文字(本身和其#否定价值),一个变量对于每一个条款,然后两个#变量指示如果我们能满足四个,而另一个确定#的最低条款(如果它,我们可以满足所有条款)#,把这两个变量的目的。例如,目标函数将是# # maximize Obj0 + Obj1 # # Obj0 = MIN(Clause1,…# Obj1 = 1 -> +…因此,当且仅当满足所有#子句时,客观值为2;一个当且仅当至少满足四个子句,否则# 0。- list() env . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf日志文件< -“genconstr.log”#定义原始数据nLiterals < - 4 nClauses < < - 2 - 8 nObj据nvar < - 2 * nLiterals + nClauses + nObj文字< -函数(n) {n} NotLit < -函数(n) {n + nLiterals}条款< -函数(n) {2 * nLiterals + n} Obj < -函数(n) {2 * nLiterals + nClauses + n}条款< -列表(c (NotLit文字(1),(2),文字(3)),c(Literal(2), NotLit(3), Literal(4)), c(Literal(3), NotLit(4), Literal(1)), c(Literal(4), NotLit(1), Literal(2)), c(NotLit(2), NotLit(3), Literal(4)), c(NotLit(3), NotLit(4), Literal(2))) #创建模型模型<- list()模型Modelname <- 'genconstr'模型#创建目标函数、变量名和变量类型vtype <- rep('B',nVars)模型ub <- rep(1, nVars)模型varnames <- c(sprintf('X%d', seq(1,nLiterals)), sprintf('notX%d', seq(1,nLiterals)), sprintf('Clause%d', seq(1,nLiterals)), sprintf('Obj%d', seq(1,nObj)))模型obj <- c(rep(0,2 *nLiterals + nclause), rep(1, nObj)) #创建连接文字和非文字模型的线性约束A <- spMatrix(nLiterals, nVars, i = c(seq(1,nLiterals), seq(1,nLiterals)), j = c(seq(1,nLiterals), seq(1+nLiterals,2*nLiterals)), x = rep(1,2*nLiterals)))模型constrnames <- c(sprintf('CNSTR_X%d',seq(1,nLiterals)))模型rhs <- rep(1, nLiterals)模型#创建或通用约束连接子句和文字模型genconor <- lapply(1: nclause, function(i) list(resvar=子句(i), var=子句[[i]], name = sprintf('CNSTR_Clause%d',i))) #设置Obj1 = Min(子句[1:nclause])模型genconmin < -列表(列表(resvar = Obj (1), var = c (seq((1)条款(nClauses))), name = ' CNSTR_Obj1 ')) #设置methoda信号如果任何条款都满意,例如#我们使用一个指标约束的形式:# (methoda = 1) - >(条款[1:nClauses])和> = 4模型genconind <- list(list(binvar = Obj(2), binval = 1, a = c(rep(0,2*nLiterals), rep(1,nClauses), rep(0,nObj)), sense = '>', rhs = 4, name = 'CNSTR_Obj2')) #保存模型gurobi_write(model, 'genconstr. txt ') #保存模型gurobi_write(model, 'genconstr. txt ')- gurobi(model, env = env) #检查优化状态status == 'OPTIMAL') {if (result . result = '最佳结果')objval > 1.9) {cat('Logical expression is satisfiable\n')} else if(result . if(result . if))objval > 0.9) {cat('至少4个子句是可满足的\n')} else {cat('最多3个子句是可满足的\n')}} else {cat('优化失败\n')} # Clear space rm(model,result,env,子句)