Getting started

Requirements

This package requires Python 3+. The optimizer requires the Gurobi solver and the gurobipy package to be installed.

Dependency

Versions

Python

3+

Gurobi

9.0+

gurobipy

Compatible with your Gurobi version

Gurobi

Gurobi is a solver for mathematical optimization, including mixed-integer linear programming (MILP). It has a free academic license.

Installation

First, clone the repository.

$ git clone https://https://github.com/pedrosbmartins/optimal-decision-graphs.git

Then, create and activate a python environment (for instance, using virtualenv).

$ virtualenv -p python3 env
$ source env/bin/activate

Finally, install required packages.

$ pip install -r requirements.txt
$ python -m pip install -i https://pypi.gurobi.com gurobipy

Basic usage

Import components.

from dataset import Dataset
from topology import Topology
from heuristic import Heuristic
from optimizer import Optimizer
from visualizer import Visualizer

Setup desired dataset, topology skeleton and alpha hyperparameter.

dataset = "path/to/dataset.csv"
skeleton = [1,2,4,4,4]
alpha = 0.1

data = Dataset(dataset, train_validation_test_split=[0.5, 0.25, 0.25])
topology = Topology(skeleton, data)

Run heuristic to generate a first solution.

heuristic = Heuristic(data, topology, alpha=alpha)
print('Heuristic', heuristic.solution.training_accuracy(), heuristic.solution.test_accuracy())

Run optimizer using the heuristic as initial solution, then generate a Graphviz visualization.

optimized = Optimizer(data, topology, alpha=alpha, initial_solution=heuristic.solution)
print('Optimized', optimized.solution.training_accuracy(), optimized.solution.test_accuracy())

optimized_viz = Visualizer(data, optimized.solution)
optimized_viz.view()

Issues

If you encounter any issues, please open a ticket on GitHub.