szmlb.net

tips for robotics

PICOSメモ (整数計画問題)

前回の続き.
PICOSで整数計画問題を解く場合のサンプルコードをメモしておく.

PuLPを使っている以下の記事を参考にPICOSで解いてみる.
qiita.com

ナップサック問題

import picos as pic
import cplex
import scipy as sp
import scipy.linalg as sl
import numpy as np

def testSolveKnapSack():
    """
    ナップサック問題を解く

    min weight * x
    s.t. size * x <= capacity
         x in [0,  1]
    """

    weight = np.array([[22, 12, 16, 10, 35, 26, 42, 53]])
    size = np.array([[21, 11, 15, 9, 34, 25, 41, 52]])
    capacity = 100

    w = pic.new_param('w', weight)
    s = pic.new_param('s', size)

    ks = pic.Problem()

    x = ks.add_variable('x', (size.shape[1], 1),  vtype='binary')
    ks.add_constraint(capacity >= s * x)
    ks.set_objective('max', w * x)

    print(ks)
    ks.solve()
    print(x.value)

順次追加予定