summaryrefslogtreecommitdiff
path: root/opt/dual/dual_demo.py
blob: 22eb8f018b6a3e904e5101ca43e9e9210f4be5bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from scipy import optimize
from scipy.spatial import distance

from ortools.sat.python import cp_model


def obj(x1, x2):
    return -(3*x1 + 4*x2)


if __name__ == '__main__':

    # 原始问题
    c = [-3, -4]
    A = [[1/2, 2], [3, 1]]
    b = [30, 25]

    res = optimize.linprog(c, A_ub=A, b_ub=b, bounds=[[0, None], [0, None]])
    print(res)

    print('=============')

    c = [30, 25]
    A = [[-1/2, -3], [-2, -1]]
    b = [-3, -4]
    res = optimize.linprog(c, A_ub=A, b_ub=b, bounds=[[0, None], [0, None]])
    print(res)
    print('=============')

    c = [5, 1]
    A = [[-2, -1], [-1, -1], [-2, -20]]
    b = [-6, -4, -21]
    res = optimize.linprog(c, A_ub=A, b_ub=b, bounds=[[0, None], [0, None]])
    print(res)
    print('=============')

    c = [-3, -5]
    A = [[1, 3], [3, 4]]
    b = [60, 120]
    res = optimize.linprog(c, A_ub=A, b_ub=b, bounds=[[10, None], [0, None]])
    print(res)
    print('=============')

    model = cp_model.CpModel()
    model.AddBoolOr()