/OptimizHelper

A tiny command line interface tool for solving (non) integer & network optimization problems ๐ŸŽฏ

Primary LanguagePythonMIT LicenseMIT

OptimizHelper

A tiny command line interface tool for solving (non) integer & network optimization problems.

cli

Setup

  1. Clone this repo.
  2. Open console, navigate to repo, execute pip install -r requirements.txt.
  3. You're ready to go.

Examples

Introduction:


$ python3 main.py
Usage: main.py [OPTIONS] COMMAND [ARGS]...

  Simple CLI for optimization problems.

Options:
  -h, --help  Show this message and exit.

Part 1a:
  branchbound      IP relaxation on an Ax<=b system. File must have the sheets named 'A', 'b' an...
  hyperplanes      Retruns basic & feasible solutions of an Ax<=b system with 2 or 3 dimensions....
  matanalysis      Basic matrix analysis insights.
  plot             Plots a 2D system of inequalities provided in Ax<=b form. File must have the...
  simplex          Applies Simplex on an Ax<=b system with 2 or 3 dimensions. File must have the...

Part 2a:
  aitken           Returns the Aitken sequence for a value series of at least 3.
  broyden          Iterating optimization using Broyden's method given a function and starting v...
  broydeninter     Iterating optimization using Broyden's method given the interim results start...
  diffbeauty       Returns the derivative in pretty form.
  difftree         Returns all partial derivatives as a tree.
  evaluate         Evaluates a function with a given substitution (assumes alphabetic order).
  gradient         Returns the gradient of the given function.
  hessian          Returns Hessian matrix or its determinant of a given function.
  newton           Applies one step of Newton's method.
  succhalv         Applies Gradient method with successive halving and parabola fitting on 2D or...

Part 2b:
  dijkstra         All shortest paths to all other nodes from given starting node using an (un)d...
  drawgraph        Plots a graph based on provided adjacency matrix.
  floydwarshall    Returns matrix with shortest distances between all nodes.
  maxflow          Finds maximum flow based on provided edge list.
  maxmatch         Maximum matchings of a bipartite graph based on provided adjacency matrix.
  mincostmaxflow   Returns a maximum s-t flow of minimum cost based on provided edge list with weights and costs.
  mincut           Finds minimum s-t-cut based on provided edge list or adjacency matrix.
  mst              Returns the minimum spanning tree of an undirected graph.
  traverse         Traverses graph provided as (un)directed adjacency matrix either breadth-first...

Part 1a

Linear Optimizations Problems

Matrix Analysis

Get linearly independent components and inversion of matrix:

$ python3 main.py matanalysis /path/to/matrix.ods --pretty
โ•’โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ••
โ”‚ insight          โ”‚ descr   โ”‚ matrix      โ”‚
โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ provided input   โ”‚ -       โ”‚ โŽก0  -1โŽค     โ”‚
โ”‚                  โ”‚         โ”‚ โŽข     โŽฅ     โ”‚
โ”‚                  โ”‚         โ”‚ โŽฃ2  -1โŽฆ     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ independent cols โ”‚ (0, 1)  โ”‚ โŽก0  -1โŽค     โ”‚
โ”‚                  โ”‚         โ”‚ โŽข     โŽฅ     โ”‚
โ”‚                  โ”‚         โ”‚ โŽฃ2  -1โŽฆ     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ independent rows โ”‚ (0, 1)  โ”‚ โŽก0  -1โŽค     โ”‚
โ”‚                  โ”‚         โ”‚ โŽข     โŽฅ     โ”‚
โ”‚                  โ”‚         โ”‚ โŽฃ2  -1โŽฆ     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ inverse          โ”‚ -       โ”‚ โŽก-1/2  1/2โŽค โ”‚
โ”‚                  โ”‚         โ”‚ โŽข         โŽฅ โ”‚
โ”‚                  โ”‚         โ”‚ โŽฃ -1    0 โŽฆ โ”‚
โ•˜โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•›

Basic Selection of Hyperplanes

Get basic & feasible solutions of an Ax<=b system. Matrices are provided via an ODF-file with two sheets, namely 'A' and 'b':

$ python3 main.py hyperplanes /path/to/FileWithSheets_A_b.ods --pretty
โ•’โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ••
โ”‚ possibility*   โ”‚ ABi          โ”‚ ABi^(-1)       โ”‚ bBi   โ”‚ xBi.T     โ”‚ conclusion               โ”‚
โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ B1=(2, 4, 5)   โ”‚ โŽก-1  -1  -1โŽค โ”‚ โŽก0   0   -1โŽค   โ”‚ โŽก-2โŽค  โ”‚ [0  1  1] โ”‚ if equal to vertex       โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚ โŽข          โŽฅ   โ”‚ โŽข  โŽฅ  โ”‚           โ”‚   -> feasible            โ”‚
โ”‚                โ”‚ โŽข0   -1  0 โŽฅ โ”‚ โŽข0   -1  0 โŽฅ   โ”‚ โŽข-1โŽฅ  โ”‚           โ”‚ otherwise infeasible     โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚ โŽข          โŽฅ   โ”‚ โŽข  โŽฅ  โ”‚           โ”‚                          โ”‚
โ”‚                โ”‚ โŽฃ-1  0   0 โŽฆ โ”‚ โŽฃ-1  1   1 โŽฆ   โ”‚ โŽฃ0 โŽฆ  โ”‚           โ”‚                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ B2=(2, 4, 6)   โ”‚ โŽก-1  -1  -1โŽค โ”‚ not invertible โ”‚ -     โ”‚ -         โ”‚ not a basic selection as โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚                โ”‚       โ”‚           โ”‚ row(s) {4, 6} are        โ”‚
โ”‚                โ”‚ โŽข0   -1  0 โŽฅ โ”‚                โ”‚       โ”‚           โ”‚ linearly dependent       โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚                โ”‚       โ”‚           โ”‚                          โ”‚
โ”‚                โ”‚ โŽฃ0   -1  0 โŽฆ โ”‚                โ”‚       โ”‚           โ”‚                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ B3=(2, 4, 7)   โ”‚ โŽก-1  -1  -1โŽค โ”‚ โŽก-1  1   1 โŽค   โ”‚ โŽก-2โŽค  โ”‚ [1  1  0] โ”‚ if equal to vertex       โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚ โŽข          โŽฅ   โ”‚ โŽข  โŽฅ  โ”‚           โ”‚   -> feasible            โ”‚
โ”‚                โ”‚ โŽข0   -1  0 โŽฅ โ”‚ โŽข0   -1  0 โŽฅ   โ”‚ โŽข-1โŽฅ  โ”‚           โ”‚ otherwise infeasible     โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚ โŽข          โŽฅ   โ”‚ โŽข  โŽฅ  โ”‚           โ”‚                          โ”‚
โ”‚                โ”‚ โŽฃ0   0   -1โŽฆ โ”‚ โŽฃ0   0   -1โŽฆ   โ”‚ โŽฃ0 โŽฆ  โ”‚           โ”‚                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ B4=(2, 5, 6)   โ”‚ โŽก-1  -1  -1โŽค โ”‚ โŽก0   -1  0 โŽค   โ”‚ โŽก-2โŽค  โ”‚ [0  0  2] โ”‚ if equal to vertex       โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚ โŽข          โŽฅ   โ”‚ โŽข  โŽฅ  โ”‚           โ”‚   -> feasible            โ”‚
โ”‚                โ”‚ โŽข-1  0   0 โŽฅ โ”‚ โŽข0   0   -1โŽฅ   โ”‚ โŽข0 โŽฅ  โ”‚           โ”‚ otherwise infeasible     โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚ โŽข          โŽฅ   โ”‚ โŽข  โŽฅ  โ”‚           โ”‚                          โ”‚
โ”‚                โ”‚ โŽฃ0   -1  0 โŽฆ โ”‚ โŽฃ-1  1   1 โŽฆ   โ”‚ โŽฃ0 โŽฆ  โ”‚           โ”‚                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ B5=(2, 5, 7)   โ”‚ โŽก-1  -1  -1โŽค โ”‚ โŽก0   -1  0 โŽค   โ”‚ โŽก-2โŽค  โ”‚ [0  2  0] โ”‚ if equal to vertex       โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚ โŽข          โŽฅ   โ”‚ โŽข  โŽฅ  โ”‚           โ”‚   -> feasible            โ”‚
โ”‚                โ”‚ โŽข-1  0   0 โŽฅ โ”‚ โŽข-1  1   1 โŽฅ   โ”‚ โŽข0 โŽฅ  โ”‚           โ”‚ otherwise infeasible     โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚ โŽข          โŽฅ   โ”‚ โŽข  โŽฅ  โ”‚           โ”‚                          โ”‚
โ”‚                โ”‚ โŽฃ0   0   -1โŽฆ โ”‚ โŽฃ0   0   -1โŽฆ   โ”‚ โŽฃ0 โŽฆ  โ”‚           โ”‚                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ B6=(2, 6, 7)   โ”‚ โŽก-1  -1  -1โŽค โ”‚ โŽก-1  1   1 โŽค   โ”‚ โŽก-2โŽค  โ”‚ [2  0  0] โ”‚ if equal to vertex       โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚ โŽข          โŽฅ   โ”‚ โŽข  โŽฅ  โ”‚           โ”‚   -> feasible            โ”‚
โ”‚                โ”‚ โŽข0   -1  0 โŽฅ โ”‚ โŽข0   -1  0 โŽฅ   โ”‚ โŽข0 โŽฅ  โ”‚           โ”‚ otherwise infeasible     โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚ โŽข          โŽฅ   โ”‚ โŽข  โŽฅ  โ”‚           โ”‚                          โ”‚
โ”‚                โ”‚ โŽฃ0   0   -1โŽฆ โ”‚ โŽฃ0   0   -1โŽฆ   โ”‚ โŽฃ0 โŽฆ  โ”‚           โ”‚                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ B7=(4, 5, 6)   โ”‚ โŽก0   -1  0โŽค  โ”‚ not invertible โ”‚ -     โ”‚ -         โ”‚ not a basic selection as โ”‚
โ”‚                โ”‚ โŽข         โŽฅ  โ”‚                โ”‚       โ”‚           โ”‚ row(s) {4, 5, 6} are     โ”‚
โ”‚                โ”‚ โŽข-1  0   0โŽฅ  โ”‚                โ”‚       โ”‚           โ”‚ linearly dependent       โ”‚
โ”‚                โ”‚ โŽข         โŽฅ  โ”‚                โ”‚       โ”‚           โ”‚                          โ”‚
โ”‚                โ”‚ โŽฃ0   -1  0โŽฆ  โ”‚                โ”‚       โ”‚           โ”‚                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ B8=(4, 5, 7)   โ”‚ โŽก0   -1  0 โŽค โ”‚ โŽก0   -1  0 โŽค   โ”‚ โŽก-1โŽค  โ”‚ [0  1  0] โ”‚ if equal to vertex       โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚ โŽข          โŽฅ   โ”‚ โŽข  โŽฅ  โ”‚           โ”‚   -> feasible            โ”‚
โ”‚                โ”‚ โŽข-1  0   0 โŽฅ โ”‚ โŽข-1  0   0 โŽฅ   โ”‚ โŽข0 โŽฅ  โ”‚           โ”‚ otherwise infeasible     โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚ โŽข          โŽฅ   โ”‚ โŽข  โŽฅ  โ”‚           โ”‚                          โ”‚
โ”‚                โ”‚ โŽฃ0   0   -1โŽฆ โ”‚ โŽฃ0   0   -1โŽฆ   โ”‚ โŽฃ0 โŽฆ  โ”‚           โ”‚                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ B9=(4, 6, 7)   โ”‚ โŽก0  -1  0 โŽค  โ”‚ not invertible โ”‚ -     โ”‚ -         โ”‚ not a basic selection as โ”‚
โ”‚                โ”‚ โŽข         โŽฅ  โ”‚                โ”‚       โ”‚           โ”‚ row(s) {4, 6, 7} are     โ”‚
โ”‚                โ”‚ โŽข0  -1  0 โŽฅ  โ”‚                โ”‚       โ”‚           โ”‚ linearly dependent       โ”‚
โ”‚                โ”‚ โŽข         โŽฅ  โ”‚                โ”‚       โ”‚           โ”‚                          โ”‚
โ”‚                โ”‚ โŽฃ0  0   -1โŽฆ  โ”‚                โ”‚       โ”‚           โ”‚                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ B10=(5, 6, 7)  โ”‚ โŽก-1  0   0 โŽค โ”‚ โŽก-1  0   0 โŽค   โ”‚ โŽก0โŽค   โ”‚ [0  0  0] โ”‚ if equal to vertex       โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚ โŽข          โŽฅ   โ”‚ โŽข โŽฅ   โ”‚           โ”‚   -> feasible            โ”‚
โ”‚                โ”‚ โŽข0   -1  0 โŽฅ โ”‚ โŽข0   -1  0 โŽฅ   โ”‚ โŽข0โŽฅ   โ”‚           โ”‚ otherwise infeasible     โ”‚
โ”‚                โ”‚ โŽข          โŽฅ โ”‚ โŽข          โŽฅ   โ”‚ โŽข โŽฅ   โ”‚           โ”‚                          โ”‚
โ”‚                โ”‚ โŽฃ0   0   -1โŽฆ โ”‚ โŽฃ0   0   -1โŽฆ   โ”‚ โŽฃ0โŽฆ   โ”‚           โ”‚                          โ”‚
โ•˜โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•›
 *skipped rows due to duplicate: {2, 4}

Simplex Algorithm

Find optimum using Simplex with all itermediate results. Matrices are provided via an ODF-file with sheets named 'A', 'b' and 'c'. Together they must represent the LP in inequality form as maximization problem. A basic selection of hyperplanes of the starting point must be provided. In the example below it is $B={4, 5}$ (see image).

simplex

$ python3 main.py simplex /path/to/matrix_A_b_c.ods 1 5 --pretty
โ•’โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ••
โ”‚   iter โ”‚ selection   โ”‚ AB       โ”‚ bB   โ”‚ ร‚=AB^(-1)    โ”‚ c   โ”‚ v = ร‚*bB   โ”‚ u = c*ร‚^(T)   โ”‚ d      โ”‚ Av   โ”‚ Ad     โ”‚ b    โ”‚ ฮป = min(stepsizes)         โ”‚ selection_new   โ”‚ v'   โ”‚
โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ก
โ”‚      0 โ”‚ B0 = (4, 5) โ”‚ โŽก-1  0 โŽค โ”‚ โŽก0โŽค  โ”‚ โŽก-1  0 โŽค     โ”‚ โŽก6โŽค โ”‚ โŽก0โŽค        โ”‚ โŽก-6โŽค          โ”‚ -ร‚4 =  โ”‚ โŽก0โŽค  โ”‚ โŽก1 โŽค   โ”‚ โŽก12โŽค โ”‚ 5 = ฮป = min([12, 5, 5])    โ”‚ B1 = {2, 5}     โ”‚ โŽก5โŽค  โ”‚
โ”‚        โ”‚             โ”‚ โŽข      โŽฅ โ”‚ โŽข โŽฅ  โ”‚ โŽข      โŽฅ     โ”‚ โŽข โŽฅ โ”‚ โŽข โŽฅ        โ”‚ โŽข  โŽฅ          โ”‚        โ”‚ โŽข โŽฅ  โ”‚ โŽข  โŽฅ   โ”‚ โŽข  โŽฅ โ”‚ i.e. selection             โ”‚ out = j = 4     โ”‚ โŽข โŽฅ  โ”‚
โ”‚        โ”‚             โ”‚ โŽฃ0   -1โŽฆ โ”‚ โŽฃ0โŽฆ  โ”‚ โŽฃ0   -1โŽฆ     โ”‚ โŽฃ5โŽฆ โ”‚ โŽฃ0โŽฆ        โ”‚ โŽฃ-5โŽฆ          โ”‚ โŽก1โŽค    โ”‚ โŽข0โŽฅ  โ”‚ โŽข6 โŽฅ   โ”‚ โŽข30โŽฅ โ”‚ k = (1, 2, 3)              โ”‚ in = k = 2      โ”‚ โŽฃ0โŽฆ  โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚ โŽข โŽฅ    โ”‚ โŽข โŽฅ  โ”‚ โŽข  โŽฅ   โ”‚ โŽข  โŽฅ โ”‚ cand. sel. = (2, 3)        โ”‚                 โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚ โŽฃ0โŽฆ    โ”‚ โŽข0โŽฅ  โ”‚ โŽข3 โŽฅ   โ”‚ โŽข15โŽฅ โ”‚ took k = 2                 โ”‚ write as:       โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚        โ”‚ โŽข โŽฅ  โ”‚ โŽข  โŽฅ   โ”‚ โŽข  โŽฅ โ”‚                            โ”‚ {4, 5} - {4}    โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚        โ”‚ โŽข0โŽฅ  โ”‚ โŽข-1โŽฅ   โ”‚ โŽข0 โŽฅ โ”‚                            โ”‚ โˆช               โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚        โ”‚ โŽข โŽฅ  โ”‚ โŽข  โŽฅ   โ”‚ โŽข  โŽฅ โ”‚                            โ”‚ {2}             โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚        โ”‚ โŽฃ0โŽฆ  โ”‚ โŽฃ0 โŽฆ   โ”‚ โŽฃ0 โŽฆ โ”‚                            โ”‚ = {2, 5}        โ”‚      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚      1 โ”‚ B1 = (2, 5) โ”‚ โŽก6  2 โŽค  โ”‚ โŽก30โŽค โ”‚ โŽก1/6  1/3โŽค   โ”‚ โŽก6โŽค โ”‚ โŽก5โŽค        โ”‚ โŽก1 โŽค          โ”‚ -ร‚5 =  โ”‚ โŽก5 โŽค โ”‚ โŽก8/3โŽค  โ”‚ โŽก12โŽค โ”‚ 0 = ฮป = min([21/8, 0, 15]) โ”‚ B2 = {2, 3}     โ”‚ โŽก5โŽค  โ”‚
โ”‚        โ”‚             โ”‚ โŽข     โŽฅ  โ”‚ โŽข  โŽฅ โ”‚ โŽข        โŽฅ   โ”‚ โŽข โŽฅ โ”‚ โŽข โŽฅ        โ”‚ โŽข  โŽฅ          โ”‚        โ”‚ โŽข  โŽฅ โ”‚ โŽข   โŽฅ  โ”‚ โŽข  โŽฅ โ”‚ i.e. selection             โ”‚ out = j = 5     โ”‚ โŽข โŽฅ  โ”‚
โ”‚        โ”‚             โ”‚ โŽฃ0  -1โŽฆ  โ”‚ โŽฃ0 โŽฆ โ”‚ โŽฃ 0   -1 โŽฆ   โ”‚ โŽฃ5โŽฆ โ”‚ โŽฃ0โŽฆ        โ”‚ โŽฃ-3โŽฆ          โ”‚ โŽก-1/3โŽค โ”‚ โŽข30โŽฅ โ”‚ โŽข 0 โŽฅ  โ”‚ โŽข30โŽฅ โ”‚ k = (1, 3, 4)              โ”‚ in = k = 3      โ”‚ โŽฃ0โŽฆ  โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚ โŽข    โŽฅ โ”‚ โŽข  โŽฅ โ”‚ โŽข   โŽฅ  โ”‚ โŽข  โŽฅ โ”‚ cand. sel. = (3,)          โ”‚                 โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚ โŽฃ 1  โŽฆ โ”‚ โŽข15โŽฅ โ”‚ โŽข 1 โŽฅ  โ”‚ โŽข15โŽฅ โ”‚ took k = 3                 โ”‚ write as:       โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚        โ”‚ โŽข  โŽฅ โ”‚ โŽข   โŽฅ  โ”‚ โŽข  โŽฅ โ”‚                            โ”‚ {2, 5} - {5}    โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚        โ”‚ โŽข-5โŽฅ โ”‚ โŽข1/3โŽฅ  โ”‚ โŽข0 โŽฅ โ”‚                            โ”‚ โˆช               โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚        โ”‚ โŽข  โŽฅ โ”‚ โŽข   โŽฅ  โ”‚ โŽข  โŽฅ โ”‚                            โ”‚ {3}             โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚        โ”‚ โŽฃ0 โŽฆ โ”‚ โŽฃ-1 โŽฆ  โ”‚ โŽฃ0 โŽฆ โ”‚                            โ”‚ = {2, 3}        โ”‚      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚      2 โ”‚ B2 = (2, 3) โ”‚ โŽก6  2โŽค   โ”‚ โŽก30โŽค โ”‚ โŽก1/3   -1/3โŽค โ”‚ โŽก6โŽค โ”‚ โŽก5โŽค        โ”‚ โŽก-1/2โŽค        โ”‚ -ร‚2 =  โ”‚ โŽก5 โŽค โ”‚ โŽก7/6 โŽค โ”‚ โŽก12โŽค โ”‚ 6 = ฮป = min([6, 15])       โ”‚ B3 = {1, 3}     โ”‚ โŽก3โŽค  โ”‚
โ”‚        โ”‚             โ”‚ โŽข    โŽฅ   โ”‚ โŽข  โŽฅ โ”‚ โŽข          โŽฅ โ”‚ โŽข โŽฅ โ”‚ โŽข โŽฅ        โ”‚ โŽข    โŽฅ        โ”‚        โ”‚ โŽข  โŽฅ โ”‚ โŽข    โŽฅ โ”‚ โŽข  โŽฅ โ”‚ i.e. selection             โ”‚ out = j = 2     โ”‚ โŽข โŽฅ  โ”‚
โ”‚        โ”‚             โ”‚ โŽฃ3  2โŽฆ   โ”‚ โŽฃ15โŽฆ โ”‚ โŽฃ-1/2   1  โŽฆ โ”‚ โŽฃ5โŽฆ โ”‚ โŽฃ0โŽฆ        โ”‚ โŽฃ 3  โŽฆ        โ”‚ โŽก-1/3โŽค โ”‚ โŽข30โŽฅ โ”‚ โŽข -1 โŽฅ โ”‚ โŽข30โŽฅ โ”‚ k = (1, 4)                 โ”‚ in = k = 1      โ”‚ โŽฃ3โŽฆ  โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚ โŽข    โŽฅ โ”‚ โŽข  โŽฅ โ”‚ โŽข    โŽฅ โ”‚ โŽข  โŽฅ โ”‚ cand. sel. = (1,)          โ”‚                 โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚ โŽฃ1/2 โŽฆ โ”‚ โŽข15โŽฅ โ”‚ โŽข 0  โŽฅ โ”‚ โŽข15โŽฅ โ”‚ took k = 1                 โ”‚ write as:       โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚        โ”‚ โŽข  โŽฅ โ”‚ โŽข    โŽฅ โ”‚ โŽข  โŽฅ โ”‚                            โ”‚ {2, 3} - {2}    โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚        โ”‚ โŽข-5โŽฅ โ”‚ โŽข1/3 โŽฅ โ”‚ โŽข0 โŽฅ โ”‚                            โ”‚ โˆช               โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚        โ”‚ โŽข  โŽฅ โ”‚ โŽข    โŽฅ โ”‚ โŽข  โŽฅ โ”‚                            โ”‚ {1}             โ”‚      โ”‚
โ”‚        โ”‚             โ”‚          โ”‚      โ”‚              โ”‚     โ”‚            โ”‚               โ”‚        โ”‚ โŽฃ0 โŽฆ โ”‚ โŽฃ-1/2โŽฆ โ”‚ โŽฃ0 โŽฆ โ”‚                            โ”‚ = {1, 3}        โ”‚      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚      3 โ”‚ B3 = (1, 3) โ”‚ โŽก1  3โŽค   โ”‚ โŽก12โŽค โ”‚ โŽก-2/7  3/7 โŽค โ”‚ โŽก6โŽค โ”‚ โŽก3โŽค        โ”‚ โŽก3/7 โŽค        โ”‚ DONE   โ”‚ DONE โ”‚ DONE   โ”‚ DONE โ”‚ DONE                       โ”‚ DONE            โ”‚ โŽก3โŽค  โ”‚
โ”‚        โ”‚             โ”‚ โŽข    โŽฅ   โ”‚ โŽข  โŽฅ โ”‚ โŽข          โŽฅ โ”‚ โŽข โŽฅ โ”‚ โŽข โŽฅ        โ”‚ โŽข    โŽฅ        โ”‚        โ”‚      โ”‚        โ”‚      โ”‚                            โ”‚                 โ”‚ โŽข โŽฅ  โ”‚
โ”‚        โ”‚             โ”‚ โŽฃ3  2โŽฆ   โ”‚ โŽฃ15โŽฆ โ”‚ โŽฃ3/7   -1/7โŽฆ โ”‚ โŽฃ5โŽฆ โ”‚ โŽฃ3โŽฆ        โ”‚ โŽฃ13/7โŽฆ        โ”‚        โ”‚      โ”‚        โ”‚      โ”‚                            โ”‚                 โ”‚ โŽฃ3โŽฆ  โ”‚
โ•˜โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•›

result = SimplexResult.OPTIMAL
v* = [[3], [3]]
optimal_value =  c^T * v = 33 (maximization problem)
optimal_value = -c^T * v = -33 (minimization problem)
unique = True

Plot System of Inequalities

Plots a 2D system of inequalities provided in Ax<=b form. File must have the sheets named 'A' and 'b'. See image below (left plot).

$ python3 main.py plot /path/to/FileWithSheets_A_b.ods -x -1 6 -y 0 5
result saved as: ./plot.png

Also possible to show an instructed Gomory Chvatal Cut provided as $(c1, h1, c2, h2)$ which will result in a new hyperplane $h3 = c1 * h1 + c2 * h2$. See image below (right plot).

$ python3 main.py plot /path/to/FileWithSheets_A_b.ods -x -1 6 -y 0 5 -gc 0.2 1 0.1 2
result saved as: ./plot.png
gc-cut with 0.2*(1) +  0.1*(2)
= (0.2*[-x + 4โ‹…y]) + (0.1*[2โ‹…x + 2โ‹…y]) โ‰ค โŒŠ(0.2*[8]) + (0.1*[9])โŒ‹
= 1.0โ‹…y โ‰ค 2

plot

Branch and Bound

IP relaxation on an Ax<=b system. File must have the sheets named 'A', 'b' and 'c' which together represent the LP in inequality form as maximization problem. See sample file below (Knapsack problem).

plot

Knapsack encoding:

A: holds volumes in first row

b: holds capacity in first row

c: holds values in first row

$ python3 main.py branchbound '/path/to//knapsack.ods' -k
โ•’โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ••
โ”‚ step    โ”‚ c                โ”‚ x_ub            โ”‚ z_ub   โ”‚ x_lb         โ”‚ z_lb   โ”‚ global update   โ”‚ stop criteria   โ”‚
โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ [1] r=0 โ”‚ [64  57  48  11] โ”‚ [1  1  5/8  0]  โ”‚ 151    โ”‚ [1  1  0  0] โ”‚ 121    โ”‚ [1]: z_lb = 121 โ”‚                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ [2] r=2 โ”‚ [64  57  48  11] โ”‚ โŽก   10      โŽค   โ”‚ 142    โ”‚ [1  0  1  0] โ”‚ 112    โ”‚                 โ”‚                 โ”‚
โ”‚         โ”‚                  โ”‚ โŽข1  โ”€โ”€  1  0โŽฅ   โ”‚        โ”‚              โ”‚        โ”‚                 โ”‚                 โ”‚
โ”‚         โ”‚                  โ”‚ โŽฃ   19      โŽฆ   โ”‚        โ”‚              โ”‚        โ”‚                 โ”‚                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ [3] r=4 โ”‚ [64  57  48  11] โ”‚ [7/16  1  1  0] โ”‚ 133    โ”‚ [0  1  1  0] โ”‚ 105    โ”‚                 โ”‚                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ [4] r=6 โ”‚                  โ”‚                 โ”‚        โ”‚              โ”‚        โ”‚                 โ”‚ infeasible      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ [5] r=5 โ”‚ [64  57  48  11] โ”‚ [0  1  1  7/8]  โ”‚ 917/8  โ”‚ [0  1  1  0] โ”‚ 105    โ”‚                 โ”‚ dominance       โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ [6] r=3 โ”‚ [64  57  48  11] โ”‚ [1  0  1  1]    โ”‚ 123    โ”‚ [1  0  1  1] โ”‚ 123    โ”‚ [6]: z_lb = 123 โ”‚ optimal         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ [7] r=1 โ”‚ [64  57  48  11] โ”‚ [1  1  0  1]    โ”‚ 132    โ”‚ [1  1  0  1] โ”‚ 132    โ”‚ [7]: z_lb = 132 โ”‚ optimal         โ”‚
โ•˜โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•›
result saved as: ./tree.png

plot


Part 2

Unconstrained Continuous Optimizations Problems

Derivatives

Differenciate a function once w.r.t. x and print beatifuly.

$ python3 main.py diffbeauty '(x^2-2xy+x)^2' --wrt=x
fx:
                โŽ› 2            โŽž
(4โ‹…x - 4โ‹…y + 2)โ‹…โŽx  - 2โ‹…xโ‹…y + xโŽ 

Get complete partial differenciation tree w.r.t. all variables.

$ python3 main.py difftree '(x^2-2xy+x)^2'
f: (x^2 - 2xy + x)^2
โ”œโ”€โ”€ f1x_: (4x - 4y + 2)(x^2 - 2xy + x)
โ”‚   โ”œโ”€โ”€ f2x_x: 4x^2 - 8xy + 4x + (2x - 2y + 1)(4x - 4y + 2)
โ”‚   โ”‚   โ”œโ”€โ”€ f3x_xx: 24x - 24y + 12
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ f4x_xxx: 24
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ f4y_xxx: -24
โ”‚   โ”‚   โ””โ”€โ”€ f3y_xx: -24x + 16y - 8
โ”‚   โ”‚       โ”œโ”€โ”€ f4x_yxx: -24
โ”‚   โ”‚       โ””โ”€โ”€ f4y_yxx: 16
โ”‚   โ””โ”€โ”€ f2y_x: -4x^2 + 8xy - 2x(4x - 4y + 2) - 4x
โ”‚       โ”œโ”€โ”€ f3x_yx: -24x + 16y - 8
โ”‚       โ”‚   โ”œโ”€โ”€ f4x_xyx: -24
โ”‚       โ”‚   โ””โ”€โ”€ f4y_xyx: 16
โ”‚       โ””โ”€โ”€ f3y_yx: 16x
โ”‚           โ””โ”€โ”€ f4x_yyx: 16
โ””โ”€โ”€ f1y_: -4x(x^2 - 2xy + x)
    โ”œโ”€โ”€ f2x_y: -4x^2 + 8xy - 4x(2x - 2y + 1) - 4x
    โ”‚   โ”œโ”€โ”€ f3x_xy: -24x + 16y - 8
    โ”‚   โ”‚   โ”œโ”€โ”€ f4x_xxy: -24
    โ”‚   โ”‚   โ””โ”€โ”€ f4y_xxy: 16
    โ”‚   โ””โ”€โ”€ f3y_xy: 16x
    โ”‚       โ””โ”€โ”€ f4x_yxy: 16
    โ””โ”€โ”€ f2y_y: 8x^2
        โ””โ”€โ”€ f3x_yy: 16x
            โ””โ”€โ”€ f4x_xyy: 16

Evaluations

Evaluate an expression with given input values.

$ python3 main.py evaluate '2^(1/2)'
13276383826/9387821033

$ python3 main.py evaluate '2x + y' 4 3
11

Gradient Method with Successive Halving

Receive the gradient vector/matrix.

$ python3 main.py gradient '(x^2-2xy+x)^2'
[['2x(x - 2y + 1)(2x - 2y + 1)', '4x^2(-x + 2y - 1)']]

$ python3 main.py gradient '(x^2-2xy+x)^2' --pretty
โŽก                                      2               โŽค
โŽฃ2โ‹…xโ‹…(x - 2โ‹…y + 1)โ‹…(2โ‹…x - 2โ‹…y + 1)  4โ‹…x โ‹…(-x + 2โ‹…y - 1)โŽฆ

Evaluate the gradient of a function at a given point.

$ python3 main.py gradient '(x^2-2xy+x)^2' -s x 2 -s y 2 --pretty
[-4  16]

Next better point using Gradient method with successive halving (incl. parabola fitted point $B*$):

$ python3 main.py succhalv '(x-2)^4 + (x-2y)^2' 2 0
#            B  (x1, y1)               f(x1, y1)  < 4 ?
---  ---------  -------------------  -----------  -------
0    1          (-2, 8)               580         False
1    0.5        (0, 4)                 80         False
2    0.25       (1, 2)                 10         False
3    0.125      (1.5, 1)                0.3125    True
B*   0.0969626  (1.61215, 0.775701)     0.026319  -

(x1, y1) = (1.5, 1)
(x1, y1) = (1.61215, 0.775701)  <-- parabola fitted using B*

Also works for 3 dimensional functions. Use the double dash (--) when working with negative values as after it all further parameters are accepted as arguments.

python3 main.py succhalv 'x^2 + y^2 +z^2' -- 3 1 -2
#      B  (x1, y1)       f(x1, y1)  < 14 ?
---  ---  -----------  -----------  --------
0    1    (-3, -1, 2)           14  False
1    0.5  (0, 0, 0)              0  True
B*   0.5  (0, 0, 0)              0  -

(x1, y1) = (0, 0, 0)
(x1, y1) = (0, 0, 0)  <-- parabola fitted using B*

Hessian

Receive the Hessian matrix of a given function.

$ python3 main.py hessian '(x-2)^4 + (x-2y)^2'
[['12(x - 2)^2 + 2', '-4'], ['-4', '8']]

$ python3 main.py hessian '(x-2)^4 + (x-2y)^2' --pretty
โŽก          2        โŽค
โŽข12โ‹…(x - 2)  + 2  -4โŽฅ
โŽข                   โŽฅ
โŽฃ      -4         8 โŽฆ

Solve for given substitution.

$ python3 main.py hessian '(x-2)^4 + (x-2y)^2' -s x 0 -s y 0
[['50', '-4'], ['-4', '8']]

$ python3 main.py hessian '(x-2)^4 + (x-2y)^2' -s x 0 -s y 0 --pretty
โŽก50  -4โŽค
โŽข      โŽฅ
โŽฃ-4  8 โŽฆ

Determinant of Hessian matrix:

$ python3 main.py hessian '(x-2)^4 + (x-2y)^2' --det
96x^2 - 384x + 384

$ python3 main.py hessian '(x-2)^4 + (x-2y)^2' --det --pretty
    2
96โ‹…x  - 384โ‹…x + 384

$ python3 main.py hessian '(x-2)^4 + (x-2y)^2' -s x 0 -s y 0 --det
384

Newton's Method

One iteration from a given point to a next better point using Newton's method:

$ python3 main.py newton '(x^2-2xy+x)^2' -s x 2 -s y 2
a=(x0, y0)    H                   b=H^(-1)                c=โˆ‡f(x0, y0)    a-bc=(x1, y1)
------------  ------------------  ----------------------  --------------  ---------------
[[2], [2]]    [[-6, 0], [0, 32]]  [[-1/6, 0], [0, 1/32]]  [[-4, 16]]      [[4/3], [3/2]]

$ python3 main.py newton '(x^2-2xy+x)^2' -s x 2 -s y 2 --pretty
a=(x0, y0)    H         b=H^(-1)      c=โˆ‡f(x0, y0)    a-bc=(x1, y1)
------------  --------  ------------  --------------  ---------------
โŽก2โŽค           โŽก-6  0 โŽค  โŽก-1/6   0  โŽค  [-4  16]        โŽก4/3โŽค
โŽข โŽฅ           โŽข      โŽฅ  โŽข          โŽฅ                  โŽข   โŽฅ
โŽฃ2โŽฆ           โŽฃ0   32โŽฆ  โŽฃ 0    1/32โŽฆ                  โŽฃ3/2โŽฆ

Broyden's Method

Custom amount of interations using Broyden's method:

$ python3 main.py broyden '(x^2-2xy+x)^2' 2 2 --pretty -s 4
โ•’โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ••
โ”‚   i โ”‚ [Xi, Yi]            โ”‚ di                                      โ”‚ gi                                    โ”‚ Ai                                             โ”‚ โˆ‡f(Xi, Yi)           โ”‚ [X(i+1), Y(i+1)]    โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚   0 โ”‚ โŽก2.0โŽค               โ”‚ []                                      โ”‚ []                                    โ”‚ โŽก -0.166666666666667    3.93940421025525e-126โŽค โ”‚ โŽก-4.0โŽค               โ”‚ โŽก1.33333333333333โŽค  โ”‚
โ”‚     โ”‚ โŽข   โŽฅ               โ”‚                                         โ”‚                                       โ”‚ โŽข                                            โŽฅ โ”‚ โŽข    โŽฅ               โ”‚ โŽข                โŽฅ  โ”‚
โ”‚     โ”‚ โŽฃ2.0โŽฆ               โ”‚                                         โ”‚                                       โ”‚ โŽฃ3.93940421025525e-126         0.03125       โŽฆ โ”‚ โŽฃ16.0โŽฆ               โ”‚ โŽฃ      1.5       โŽฆ  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   1 โ”‚ โŽก1.33333333333333โŽค  โ”‚ [-0.666666666666667 -0.500000000000000] โ”‚ [2.81481481481481 -11.2592592592593]  โ”‚ โŽก-0.211578947368421   0.00631578947368421โŽค     โ”‚ โŽก-1.18518518518519โŽค  โ”‚ โŽก1.05263157894737โŽค  โ”‚
โ”‚     โ”‚ โŽข                โŽฅ  โ”‚                                         โ”‚                                       โ”‚ โŽข                                        โŽฅ     โ”‚ โŽข                 โŽฅ  โ”‚ โŽข                โŽฅ  โ”‚
โ”‚     โ”‚ โŽฃ      1.5       โŽฆ  โ”‚                                         โ”‚                                       โ”‚ โŽฃ-0.0336842105263158  0.0359868421052632 โŽฆ     โ”‚ โŽฃ4.74074074074074 โŽฆ  โ”‚ โŽฃ1.28947368421053โŽฆ  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   2 โ”‚ โŽก1.05263157894737โŽค  โ”‚ [-0.280701754385965 -0.210526315789474] โ”‚ [0.602009795186643 -2.40803918074657] โ”‚ โŽก-0.35841561423651   0.0269646957520092โŽค       โ”‚ โŽก-0.583175389998542โŽค โ”‚ โŽก0.780711825487945โŽค โ”‚
โ”‚     โ”‚ โŽข                โŽฅ  โ”‚                                         โ”‚                                       โ”‚ โŽข                                      โŽฅ       โ”‚ โŽข                  โŽฅ โ”‚ โŽข                 โŽฅ โ”‚
โ”‚     โ”‚ โŽฃ1.28947368421053โŽฆ  โ”‚                                         โ”‚                                       โ”‚ โŽฃ-0.143811710677382  0.0514735218140069โŽฆ       โ”‚ โŽฃ 2.33270155999417 โŽฆ โ”‚ โŽฃ1.08553386911596 โŽฆ โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   3 โ”‚ โŽก0.780711825487945โŽค โ”‚ [-0.271919753459424 -0.203939815094568] โ”‚ [0.345249185044140 -1.38099674017656] โ”‚ โŽก-0.564066771922377  0.0558843898015843โŽค       โ”‚ โŽก-0.237926204954403โŽค โ”‚ โŽก0.593320115976839โŽค โ”‚
โ”‚     โ”‚ โŽข                 โŽฅ โ”‚                                         โ”‚                                       โ”‚ โŽข                                      โŽฅ       โ”‚ โŽข                  โŽฅ โ”‚ โŽข                 โŽฅ โ”‚
โ”‚     โ”‚ โŽฃ1.08553386911596 โŽฆ โ”‚                                         โ”‚                                       โ”‚ โŽฃ-0.298050078941783  0.0731632923511883โŽฆ       โ”‚ โŽฃ 0.95170481981761 โŽฆ โ”‚ โŽฃ0.944990086982629โŽฆ โ”‚
โ•˜โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•›

$ python3 main.py broyden '(x^2-2xy+x)^2' 2 2 --rational
โ•’โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ••
โ”‚   i โ”‚ [Xi, Yi]      โ”‚ di             โ”‚ gi                                      โ”‚ Ai                             โ”‚ โˆ‡f(Xi, Yi)              โ”‚ [X(i+1), Y(i+1)]    โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚   0 โ”‚ [2 2]         โ”‚ []             โ”‚ []                                      โ”‚ [[-1/6 0]                      โ”‚ [-4 16]                 โ”‚ [4/3 3/2]           โ”‚
โ”‚     โ”‚               โ”‚                โ”‚                                         โ”‚  [0 1/32]]                     โ”‚                         โ”‚                     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   1 โ”‚ [4/3 3/2]     โ”‚ [-2/3 -1/2]    โ”‚ [76/27 -304/27]                         โ”‚ [[-201/950 3/475]              โ”‚ [-32/27 128/27]         โ”‚ [20/19 49/38]       โ”‚
โ”‚     โ”‚               โ”‚                โ”‚                                         โ”‚  [-16/475 547/15200]]          โ”‚                         โ”‚                     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   2 โ”‚ [20/19 49/38] โ”‚ [-16/57 -4/19] โ”‚ [111488/185193 -24080285991/9999956057] โ”‚ [[-15609/43550 18789/696800]   โ”‚ [-4000/6859 16000/6859] โ”‚ [680/871 1891/1742] โ”‚
โ”‚     โ”‚               โ”‚                โ”‚                                         โ”‚  [-6263/43550 143467/2787200]] โ”‚                         โ”‚                     โ”‚
โ•˜โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•›

There is also the possibility to pass the interim results in case the original function is not known. In order to have two iteration, two gradients must be passed in the right order. The hessian inverse matrix is interpreted as a $2*2$ matrix going row-wise from left to right.

$ python3 main.py broydeninter --startingpoint 3.3 0.4 --gradient 1 0 --gradient 0 1 --hessian_inv 5 0 0 2 -p -r
โ•’โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ••
โ”‚   i โ”‚ [Xi, Yi]   โ”‚ di     โ”‚ gi     โ”‚ Ai     โ”‚ โˆ‡f(Xi, Yi)   โ”‚ [X(i+1), Y(i+1)]   โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚   0 โ”‚ โŽก33 โŽค      โ”‚ []     โ”‚ []     โ”‚ โŽก5  0โŽค โ”‚ โŽก1โŽค          โ”‚ โŽก-17 โŽค             โ”‚
โ”‚     โ”‚ โŽขโ”€โ”€ โŽฅ      โ”‚        โ”‚        โ”‚ โŽข    โŽฅ โ”‚ โŽข โŽฅ          โ”‚ โŽขโ”€โ”€โ”€โ”€โŽฅ             โ”‚
โ”‚     โ”‚ โŽข10 โŽฅ      โ”‚        โ”‚        โ”‚ โŽฃ0  2โŽฆ โ”‚ โŽฃ0โŽฆ          โ”‚ โŽข 10 โŽฅ             โ”‚
โ”‚     โ”‚ โŽข   โŽฅ      โ”‚        โ”‚        โ”‚        โ”‚              โ”‚ โŽข    โŽฅ             โ”‚
โ”‚     โ”‚ โŽฃ2/5โŽฆ      โ”‚        โ”‚        โ”‚        โ”‚              โ”‚ โŽฃ2/5 โŽฆ             โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   1 โ”‚ โŽก-17 โŽค     โ”‚ [-5 0] โ”‚ [-1 1] โ”‚ โŽก5  0โŽค โ”‚ โŽก0โŽค          โ”‚ โŽก-17 โŽค             โ”‚
โ”‚     โ”‚ โŽขโ”€โ”€โ”€โ”€โŽฅ     โ”‚        โ”‚        โ”‚ โŽข    โŽฅ โ”‚ โŽข โŽฅ          โ”‚ โŽขโ”€โ”€โ”€โ”€โŽฅ             โ”‚
โ”‚     โ”‚ โŽข 10 โŽฅ     โ”‚        โ”‚        โ”‚ โŽฃ2  2โŽฆ โ”‚ โŽฃ1โŽฆ          โ”‚ โŽข 10 โŽฅ             โ”‚
โ”‚     โ”‚ โŽข    โŽฅ     โ”‚        โ”‚        โ”‚        โ”‚              โ”‚ โŽข    โŽฅ             โ”‚
โ”‚     โ”‚ โŽฃ2/5 โŽฆ     โ”‚        โ”‚        โ”‚        โ”‚              โ”‚ โŽฃ-8/5โŽฆ             โ”‚
โ•˜โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•›

Aitken

Optimize a series of at least 3 values using Aitken sequence:

$ python3 main.py aitken 100 10 2 0.5
  i     Xi  Aitken Yi
---  -----  -------------------
  0  100    -
  1   10    -
  2    2    1.2195121951219512
  3    0.5  0.15384615384615385

Graph and Network Optimization

Graph Visualization

Plotting a graph based on an adjacency matrix. When no edge is shared, enter 0 weight. See example below.

$ cat adjmat.csv
Attribute,Brugg,Basel,Bern,Chur,Geneva
Brugg,0,58,101,149,250
Basel,58,0,93,198,243
Bern,101,93,0,237,156
Chur,149,198,237,0,386
Geneva,250,243,156,386,0

$ python3 main.py drawgraph "./adjmat.csv"
result saved as: ./graph.html

graph

Or as directed graph.

$ cat adjmat2.csv
Attribute,a,b,c,d,e,f,g
a,0,1,0,1,0,0,0
b,0,0,1,0,0,1,0
c,0,0,0,0,1,0,0
d,0,1,0,0,0,0,0
e,0,0,0,0,0,0,1
f,1,0,0,1,0,0,0
g,0,0,1,0,0,0,0

$ python3 main.py drawgraph "./adjmat2.csv" --directed
result saved as: ./graph.html

directed

Minimum Spanning Tree (MST)

Return minimum spanning tree.

$ cat adjmat.csv
Attribute,A,B,C,D,E,F
A,0,200,580,0,250,1200
B,200,0,500,820,0,0
C,580,500,0,230,150,1100
D,0,820,230,0,380,0
E,250,0,150,380,0,0
F,1200,0,1100,0,0,0

$ python3 main.py mst adjmat.csv
From    To      Weight
------  ----  --------
A       B          200
A       E          250
C       D          230
C       E          150
C       F         1100
----    SUM:      1930

Shortest Path using Dijkstra

Get the shortest paths from a given node to all other nodes.

$ python3 main.py dijkstra adjmat.csv A
Shortest Path      Total Weight
---------------  --------------
['A']                         0
['A', 'B']                  200
['A', 'E', 'C']             400
['A', 'E']                  250
['A', 'F']                 1200
['A', 'E', 'D']             630

Traverse

Traverse a graph either breadth-first or dept-first starting from node A.

$ python3 main.py traverse adjmat.csv A bf
  Step  From    To
------  ------  ----
     0  A       B
     1  A       C
     2  A       E
     3  A       F
     4  B       D
Encounter Order: A โ†’ B โ†’ C โ†’ E โ†’ F โ†’ D

$ python3 main.py traverse adjmat.csv A df
...
Encounter Order: E โ†’ D โ†’ F โ†’ C โ†’ B โ†’ A

Floyd-Warshall

Shortest distances between all nodes using Floyd-Warshall. Right-hand side shows changes.

$ python3 main.py floydwarshall adjmat.csv
      A    B    C    D    E    F    |       A     B     C     D     E     F
--  ---  ---  ---  ---  ---  ---  -----  ----  ----  ----  ----  ----  ----
A     0   60  160  180  520  480    |       0     0     0   180  -180  -120
B    60    0  160  140  480  440    |       0     0   -60     0   480  -360
C   160  160    0   20  360  320    |       0   -60     0     0  -540  -180
D   180  140   20    0  340  300    |     180     0     0     0  -460     0
E   520  480  360  340    0   40    |    -180   480  -540  -460     0     0
F   480  440  320  300   40    0    |    -120  -360  -180     0     0     0

# constrain intermediate nodes to A and D only:
$ python3 main.py floydwarshall adjmat.csv --onlyuse "A, D"
      A    B    C    D    E    F    |      A     B     C    D    E     F
--  ---  ---  ---  ---  ---  ---  -----  ---  ----  ----  ---  ---  ----
A     0   60  160  inf  700  600    |      0     0     0  inf    0     0
B    60    0  160  140  760  440    |      0     0   -60    0  760  -360
C   160  160    0   20  820  320    |      0   -60     0    0  -80  -180
D   inf  140   20    0  800  300    |    inf     0     0    0    0     0
E   700  760  820  800    0   40    |      0   760   -80    0    0     0
F   600  440  320  300   40    0    |      0  -360  -180    0    0     0

Maximum Flow

Maximum flow of a directed graph provided an edge list (cost is irrelevant here).

$ cat edges.csv
from,to,weight,cost
s,2,10,0
s,3,5,0
s,4,15,0
2,5,9,0
2,6,15,0
2,3,4,0
3,4,4,0
3,6,8,0
4,7,30,0
5,6,15,0
5,t,10,0
6,7,15,0
6,t,10,0
7,3,6,0
7,t,10,0

$ python3 main.py maxflow edges.csv s t
max flow: 28
node    routed values
------  --------------------------
s       {'2': 10, '3': 5, '4': 13}
2       {'5': 9, '6': 1, '3': 0}
3       {'4': 0, '6': 8}
4       {'7': 13}
5       {'6': 0, 't': 9}
6       {'7': 0, 't': 9}
7       {'3': 3, 't': 10}
t       {}

Minimum S-T-Cut

Find a minimum s-t-cut based on edge list or adjacency.

$ python3 main.py mincut edges.csv s t
cut value: 28
  #  partitions
---  -----------------------------------------------
  0  ['a1', 'a2', 'a4', 'a5', 'b1', 'b3', 'b4', 's']
  1  ['a3', 'b2', 'b5', 't']

cut edges: [('b3', 't'), ('b4', 't'), ('s', 'a3'), ('b1', 't')]
cut value: 4.0

$ python3 main.py mincut adjmat.csv s t -adj
  #  partitions
---  -----------------------------------------------
  0  ['a1', 'a2', 'a4', 'a5', 'b1', 'b3', 'b4', 's']
  1  ['a3', 'b2', 'b5', 't']

cut edges: [('b3', 't'), ('b4', 't'), ('s', 'a3'), ('b1', 't')]
cut value: 4.0

Maximum Matching

Find a maximum matching.

$ python3 main.py maxmatch adjmat.csv
matches
---------
3 - 4
7 - t
s - 2
5 - 6
maximum matches = 4

Min Cost Max Flow

Returns a maximum s-t flow of minimum cost based on provided edge list with weights and costs.

$ python3 main.py mincostmaxflow edges.csv s t
min cost: 13
max flow: 3
node    routed values
------  ----------------
s       {'b': 0, 'c': 3}
b       {'d': 1}
c       {'b': 1, 'e': 2}
d       {'t': 1}
e       {'t': 2}
t       {}