如何使用纸浆解决只有约束而没有目标函数的线性程序?

时间:2017-08-31 02:22:16

标签: python-3.x machine-learning linear-programming pulp

我想检查一个数据集是否可以线性分离。我正在使用此link中提到的方法。这是我想用纸浆实现的约束方程式:

  

-h ^ T a + B <= -1

     

h ^ T b - B <= -1

在上述等式中,'a'表示属于一个类的数据,'b'表示属于另一个类的数据。 存储在变量A中的数据有11列。最后一列包含值-1或1,具体取决于行是属于第一个等式还是第二个等式。类似地,其余列包含所有负值或正值,具体取决于行是属于第一个等式还是第二个等式。以下是我正在使用的代码:

try:
        import os
        #import random
        import traceback
        import datetime
        #import numpy as np
        import scipy.io as sio
        import pulp
        os.system('cls')
        dicA  = sio.loadmat('A1.mat')
        A = dicA.get('A1')        
        var = pulp.LpVariable.dicts("var",range(11),cat =pulp.LpContinuous)
        model = pulp.LpProblem("Data linearly seaparable", pulp.LpMinimize)
        print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
        for i in range(len(A)):
            expr = pulp.LpAffineExpression()
            for j in range(len(A[i])):
                expr += var[j]*A[i][j]
            expr = expr <= -1
            model+= expr
        print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
        model.solve()
        print(pulp.LpStatus[model.status])
        print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
except:
        print('exception')
        tb = traceback.format_exc()
        print(tb)
finally:
        print('reached finally')

而且,我得到以下输出:

2017-08-31 07:28:30
2017-08-31 07:28:36
Infeasible
2017-08-31 07:28:42
reached finally

根据纸浆文档,我们添加到模型中的第一个方程应该是目标函数,但在这种情况下没有目标函数,所以我只在模型中添加约束。这是正确的,还是有办法指明没有目标函数。

1 个答案:

答案 0 :(得分:0)

根据纸浆文档,我们添加到模型中的第一个方程应该是目标函数,但是在这种情况下没有目标函数

添加到“模型”(问题)的第一件事不是方程而是公式,它是目标函数。

如果没有目标函数,则添加任意一个。这是文档中的示例:

# The arbitrary objective function is added
prob += 0, "Arbitrary Objective Function"