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
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)
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):