如何使用MathProg(GLPK)或其API实现最小极大组合优化问题

时间:2019-05-08 11:33:28

标签: optimization combinatorics linear-programming glpk mathprog

一般图片

我正在尝试实现一个过程(在this paper的5.1节中进行了介绍。)
给定一个建模为有向无环图(DAG)的计算机网络,我有一些初始节点(例如,攻击者的起点)和一个称为目标节点(终点,攻击者目标)的节点,我可以为这些节点计算出被破坏的可能性(由攻击者)。

一旦有了这个概率,给定一组目标的节点后代,我想在此路径中为一个(或多个)改进节点找到最佳位置,以使目标节点的概率更低(实际上是最小化)。

所有这些都描述为极小极大问题,其中,将内部极大问题的结果(目标被攻击的概率)用于外部极小问题。后者是组合问题。
整个过程都是用Java实现的,但是这里感兴趣的部分是使用GLPK求解器在MathProg中完成的。
提供了第一部分的源代码。描述了第二部分,但是没有可用的代码。因此,我的问题变成:

您能帮我在MathProg(或GLPK的JAVA API)中建模组合最小化问题吗?

有关此问题的详细解释和我的尝试,请参阅此问题的[最小化部分]。

我对MathProg的经验为零,而对优化算法的了解却很少。我很高兴听到有关如何为求解器设置此模型的提示,最好使用MathProg for GLPK和/或将这两个部分集成在一起的Java(非专有)。

最大化部分

在这部分中,由于使用SLP和GLPK解决了一个最大化问题,我获得了最大化的目标节点概率(此问题的多次迭代直到一个固定点,这都是用Java完成的。)

问题描述:

max_prob

f(T,x,y)约束具有某种形式,可以产生您在示例中看到的约束(我们现在可以省略其描述)。

这里是LP建模的MathProg中的一个示例,该示例针对10个节点的图:

var x1<=1; 
var x2<=1; 
var x3<=1; 
var x4<=1; 
var x7<=1; 
var x8<=1; 
var x9<=1; 
var x10<=1; 

maximize z: x1;
s.t. c1: x1 = x2;
s.t. l1: x1>=0.0001;
s.t. c2: x2=1*x3;
s.t. l2: x2>=0.0001;
s.t. c3: x3 = x4;
s.t. l3: x3>=0.0001;
s.t. c4: x4=0.68*x7;
s.t. l4: x4>=0.0001;
s.t. c7: x7 = x8;
s.t. l7: x7>=0.0001;
s.t. c8: x8=0.64*x9;
s.t. l8: x8>=0.0001;
s.t. c9: x9 = x10;
s.t. l9: x9>=0.0001;
s.t. c10: x10=0.68;
s.t. l10: x10>=0.0001;

Result:
Objective:  z = 0.295936 (MAXimum)

最小化部分

最小化包括通过找到位于目标节点后代集合中的一个或多个“改进节点”的组合,来最小化目标节点的折衷概率(在上一部分中已最大化)。

让Na为可改进节点的数目(j_1 单个改进对应于约束t_j1 + t_j2 + ... + t_j_Na =1。
问题是:
min_prob

其中x_g是

的解决方案

max_prb_2

其中f(x,y)包含T。如果T的第t_j个对应元素为= 1,则“改善”目标节点后代集中的第j个节点,从而目标的节点概率为妥协程度降低了。

cond开始的放松概括了多项改进。

我的尝试

var x1<=1; 
var x2<=1; 
var x3<=1; 
var x4<=1; 
var x7<=1; 
var x8<=1; 
var x9<=1; 
var x10<=1; 

var t8 binary;


maximize z: x1;
s.t. c1: x1 = x2;
s.t. l1: x1>=0.0001;
s.t. c2: x2=1*x3;
s.t. l2: x2>=0.0001;
s.t. c3: x3 = x4;
s.t. l3: x3>=0.0001;
s.t. c4: x4=0.68*x7;
s.t. l4: x4>=0.0001;
s.t. c7: x7 = x8;
s.t. l7: x7>=0.0001;
s.t. c8: x8=0.64*x9;
s.t. l8: x8>=0.0001;
s.t. c9: x9 = x10;
s.t. l9: x9>=0.0001;
s.t. c10: x10=0.68;
s.t. l10: x10>=0.0001;

#x8 is an improvable node
#t8 it the t_j_8 element of T
param t8 binary= 1; 
#p8 is a given parameter (it reduces the x1 prob. in the end)
param p8 = 0.3;

minimize z2: x1;

#this is the f(T,x,y) constraint: if t8 = 0 the coeff of x8 is reduced by p8, if t8 = 0, nothig happens

s.t. ct8: x8 = (p8**t8)*x8;
#s.t. lt8: x8>=0.0001;

solve;
end;

输出:

错误:
test.m:42:t8没有值
MathProg模型处理错误

0 个答案:

没有答案