Exemplo n.º 1
0
def verify_instance(instance, *args, **kwargs):
    if isinstance(instance, (tuple, list)):
        items, capacity, optimum = instance
    elif callable(instance):
        items, capacity, optimum = instance()
    else:
        raise TypeError("unexpected instance value: {}".format(instance))
    mcts.config_logging(level="INFO")
    root = KnapsackTreeNode.root([items, capacity])
    sols = mcts.run(root, *args, **kwargs)
    assert set(sols.best.data) == optimum
    assert root.is_exhausted
Exemplo n.º 2
0
            kk_edges, diff = karmarkar_karp(self.labels)
            return mcts.Solution(value=objective(diff), data=edges + kk_edges)


def make_partition(edges):
    adj = {JOIN: defaultdict(set), SPLIT: defaultdict(set)}
    for i, j, edge_type in edges:
        adj_edge_type = adj[edge_type]
        adj_edge_type[i].add(j)
        adj_edge_type[j].add(i)
    nverts = len(edges) + 1
    subset = [None] * nverts
    _assign_subset(adj, subset, 0, 0)
    return subset


def _assign_subset(adj, subset, i, s):
    subset[i] = s
    for edge_type in (JOIN, SPLIT):
        adj_edge_type = adj[edge_type]
        adj_edge_type_i = adj_edge_type.pop(i, ())
        s_j = s if edge_type == JOIN else 1 - s
        for j in adj_edge_type_i:
            adj_edge_type[j].remove(i)
            _assign_subset(adj, subset, j, s_j)


mcts.config_logging()
r = TreeNode.root("instances/npp/hard1000.dat")
s = mcts.run(r, iter_limit=1000)
Exemplo n.º 3
0
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from future.builtins import object, dict, range

import sys
import math

import gurobipy
import rr.opt.mcts.simple as mcts


random = mcts.random
mcts.config_logging(level="DEBUG")
logger = mcts.logger
info = logger.info
debug = logger.debug
EPS = 1e-9


# utility functions
def is_approx(x, y):
    return abs(x - y) <= EPS


def is_integral(x):
    return abs(x - round(x)) <= EPS


def is_nonzero(x):