From 0fcd6958d896f1ad15726a924f8f3fe365673354 Mon Sep 17 00:00:00 2001 From: John McMaster Date: Wed, 3 Oct 2018 16:31:39 -0700 Subject: [PATCH] timfuz: linprog simple example Signed-off-by: John McMaster --- fuzzers/007-timing/minitest/test_linprog.py | 139 ++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 fuzzers/007-timing/minitest/test_linprog.py diff --git a/fuzzers/007-timing/minitest/test_linprog.py b/fuzzers/007-timing/minitest/test_linprog.py new file mode 100644 index 00000000..78c8c24a --- /dev/null +++ b/fuzzers/007-timing/minitest/test_linprog.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python3 + +import scipy.optimize as optimize +import numpy as np +import glob +import json +import math +import sys +import os +import time + + +def run_max(Anp, b, verbose=False): + cols = len(Anp[0]) + + b_ub = -1.0 * b + A_ub = [-1.0 * x for x in Anp] + + res = optimize.linprog( + c=[1 for _i in range(cols)], + A_ub=A_ub, + b_ub=b_ub, + bounds=(0, None), + options={ + "disp": True, + 'maxiter': 1000000, + 'bland': True, + 'tol': 1e-6, + }) + nonzeros = 0 + print('Ran') + if res.success: + print('Result sample (%d elements)' % (len(res.x))) + plim = 3 + for xi, x in enumerate(res.x): + nonzero = x >= 0.001 + if nonzero: + nonzeros += 1 + if nonzero and (verbose or ( + (nonzeros < 100 or nonzeros % 20 == 0) and nonzeros <= plim)): + print(' % 4u % 10.1f' % (xi, x)) + print('Delay on %d / %d' % (nonzeros, len(res.x))) + + +def run_min(Anp, b, verbose=False): + cols = len(Anp[0]) + + b_ub = b + A_ub = Anp + + res = optimize.linprog( + c=[-1 for _i in range(cols)], + A_ub=A_ub, + b_ub=b_ub, + bounds=(0, None), + options={ + "disp": True, + 'maxiter': 1000000, + 'bland': True, + 'tol': 1e-6, + }) + nonzeros = 0 + print('Ran') + if res.success: + print('Result sample (%d elements)' % (len(res.x))) + plim = 3 + for xi, x in enumerate(res.x): + nonzero = x >= 0.001 + if nonzero: + nonzeros += 1 + if nonzero and (verbose or ( + (nonzeros < 100 or nonzeros % 20 == 0) and nonzeros <= plim)): + print(' % 4u % 10.1f' % (xi, x)) + print('Delay on %d / %d' % (nonzeros, len(res.x))) + + +def run(verbose=False): + ''' + 1 * x0 = 10 + 1 * x0 + 1 * x1 = 100 + 1 * x0 = 40 + 2 * x1 = 140 + ''' + Anp = np.array([ + [1, 0], + [1, 1], + [1, 0], + [0, 2], + ]) + b = np.array([ + 10, + 100, + 40, + 140, + ]) + ''' + Max + Optimization terminated successfully. + Current function value: 110.000000 + Iterations: 4 + Ran + Result sample (2 elements) + 0 40.0 + 1 70.0 + Delay on 2 / 2 + ''' + print('Max') + run_max(Anp, b) + print('') + print('') + print('') + ''' + Min + Optimization terminated successfully. + Current function value: -80.000000 + Iterations: 2 + Ran + Result sample (2 elements) + 0 10.0 + 1 70.0 + Delay on 2 / 2 + ''' + print('Min') + run_min(Anp, b) + + +def main(): + import argparse + + parser = argparse.ArgumentParser(description='Test') + + parser.add_argument('--verbose', action='store_true', help='') + args = parser.parse_args() + + run(verbose=args.verbose) + + +if __name__ == '__main__': + main()