增量线性规划

时间:2014-11-04 17:09:58

标签: algorithm linear-programming

我试图实现一维线性编程,但我觉得我错过了连接点的东西。我想计算点集的凸包,所以我的约束是由线对形成的线。我试图制作一个增量算法,逐个添加点/线。

min  x_m*a + y_m*b
s.t. x_i*a + y_i*b + z_i >= 0

a', b' -> optimize with regards to 1...i

if ( x_i*a' + y_i*b' + z_i >= 0 )
    do nothing
else 
    x_i*a' + y_i*b' + z_i = 0
    b' = (-z_i - x_i*a')/y_i
    a' = ?

我想我可能搞砸了我的记谱法,这让我感到困惑,但我如何计算一个'和b'?

我试过改写我的问题:

我找到了一个在线矢量抽屉,所以我希望这些照片有意义。

2D

3D(这有一个奇怪的轮换)

在2D中,垂直线只是定义为x坐标x_m,因为它只是一条无穷大的线。我需要找到绘制的线条,我这样做的方式是,我从y = ax + b定义的线开始,b = -infinity,a = 0。然后我以随机顺序逐个添加每个点。对于每个点,我检查它是否在这条线下,如果没有,我通过锁定这一点找到一条新线,并通过所有其他点,找到x_m另一侧的点,给我当我通过锁定点和新检查的点绘制线时最大的a。最后,我会找到一条直线,通过两个点,与x_m相交,以及它下面的所有其他点。

所以     最大ax_m + b     S.T. y_1< = ax_1 + b         y_2< = ax_2 + b         y_i< = ax_i + b

我的工作正常。

在3D中,我希望使用线性编程找到由3个点(或平面z = ax + by + c)定义的面,以及其下的所有其他点。在这里,我从-infinity的水平面开始,逐个添加点,并检查它们是否在我的平面下。如果他们不是,我会尝试最大化以前发布的LP。要做到这一点,我需要能够最大化z = ax + by形式的函数,而不仅仅是y = ax + b。 (当我锁定一个点并且在1D中锁定最大值时,我忽略了c,就像我在2D中忽略了b。)

min  x_m*a + y_m*b
s.t. x_1*a + y_1*b + z_1 >= 0
s.t. x_2*a + y_2*b + z_2 >= 0
s.t. x_i*a + y_i*b + z_i >= 0

a', b' -> optimize with regards to p_1,...,p_i

if ( x_i*a' + y_i*b' + z_i >= 0 )
    do nothing
else 
    x_i*a' + y_i*b' + z_i = 0
    b' = (-z_i - x_i*a')/y_i
    a' = ?

这现在有意义吗?

基本上,我认为我只需要一些方法来逐步解决z = ax + by形式的线性程序。

0 个答案:

没有答案