├── Optimal Trade Execution - Dynamic Programming.ipynb ├── Optimal Trade Execution - Frank-Wolfe Algorithm.cp ├── Optimal Trade Execution - Frank-Wolfe Algoritm (Gurobi solver).ipynb └── Optimal Trade Execution - Market Impact Model.pdf /Optimal Trade Execution - Dynamic Programming.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "application programming hw3.ipynb", 7 | "provenance": [], 8 | "collapsed_sections": [] 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "code", 18 | "metadata": { 19 | "id": "DBpBtHpOPVUc", 20 | "colab_type": "code", 21 | "colab": {} 22 | }, 23 | "source": [ 24 | "# Assume initial price is $1\n", 25 | "import numpy as np\n", 26 | "\n", 27 | "def f(k,alpha,pi):\n", 28 | " return 1-alpha*(k**pi)\n", 29 | "\n", 30 | "\n", 31 | "def trade(alpha,pi,N,T): \n", 32 | " R=np.zeros([T,N+1]) # Create a matrix (period T x numbers left to sell) to record the max revenue with different choices of x(shares to sell)for each k (shares left) at each period\n", 33 | " shares_to_sell=np.zeros([T,N+1]) # Create a matrix (period T x shares to sell) to record the corresponding shares to sell(x) to achieve the max rev. for each k (shares left) at each period\n", 34 | " \n", 35 | " for k in range(N+1): # Start from the last period to fill in the Revenue matrix\n", 36 | " R[T-1,k]=f(k,alpha,pi)*k\n", 37 | " \n", 38 | " for t in range(T-2,-1,-1):\n", 39 | " for k in range(N+1):\n", 40 | " R[t,k]=0\n", 41 | " \n", 42 | " x=np.arange(k+1) # Find the max rev. among different choices of x(shares to sell) at each period for each k (shares left)\n", 43 | " x=f(x,alpha,pi)*x+f(x,alpha,pi)*R[t+1,k-x]\n", 44 | " R[t,k]=np.max(x)\n", 45 | " shares_to_sell[t,k]=np.argmax(x) # and record the rev. and x\n", 46 | "\n", 47 | "\n", 48 | " # Trace back the amount of shares to sell in each period and print out the total revenue.\n", 49 | " i=int(shares_to_sell[0,np.argmax(R[0])]) # The final optimal revenue is the max revenue at the 1st period for a dp problem\n", 50 | " print(\"At time 1, sell:\",i,\"shares, total revenue is\",i*f(i,alpha,pi))\n", 51 | " amt_sold=i\n", 52 | " total_rev=i*f(i,alpha,pi)\n", 53 | " for t in range(1,T-1):\n", 54 | " a=int(shares_to_sell[t,N-i])\n", 55 | " total_rev=total_rev+R[t,a]\n", 56 | " print(\"At time\",t+1,\",sell:\",a,\"shares, total revenue is\",total_rev)\n", 57 | " amt_sold=amt_sold+a\n", 58 | " i=amt_sold\n", 59 | " print(\"At time\",T,\",sell:\",N-amt_sold,\"shares, total revenue is\",np.max(R[0])) \n", 60 | " return" 61 | ], 62 | "execution_count": 0, 63 | "outputs": [] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "metadata": { 68 | "id": "o3vyx7hbPdlS", 69 | "colab_type": "code", 70 | "outputId": "91a76bb1-def2-4e23-a62c-f82b8c98f7d2", 71 | "colab": { 72 | "base_uri": "https://localhost:8080/", 73 | "height": 377 74 | } 75 | }, 76 | "source": [ 77 | "trade(alpha=0.0001,pi=0.5,N=10000,T=20)" 78 | ], 79 | "execution_count": 27, 80 | "outputs": [ 81 | { 82 | "output_type": "stream", 83 | "text": [ 84 | "At time 1, sell: 0 shares, total revenue is 0.0\n", 85 | "At time 2 ,sell: 0 shares, total revenue is 0.0\n", 86 | "At time 3 ,sell: 0 shares, total revenue is 0.0\n", 87 | "At time 4 ,sell: 0 shares, total revenue is 0.0\n", 88 | "At time 5 ,sell: 0 shares, total revenue is 0.0\n", 89 | "At time 6 ,sell: 0 shares, total revenue is 0.0\n", 90 | "At time 7 ,sell: 0 shares, total revenue is 0.0\n", 91 | "At time 8 ,sell: 0 shares, total revenue is 0.0\n", 92 | "At time 9 ,sell: 0 shares, total revenue is 0.0\n", 93 | "At time 10 ,sell: 0 shares, total revenue is 0.0\n", 94 | "At time 11 ,sell: 0 shares, total revenue is 0.0\n", 95 | "At time 12 ,sell: 0 shares, total revenue is 0.0\n", 96 | "At time 13 ,sell: 0 shares, total revenue is 0.0\n", 97 | "At time 14 ,sell: 0 shares, total revenue is 0.0\n", 98 | "At time 15 ,sell: 0 shares, total revenue is 0.0\n", 99 | "At time 16 ,sell: 8631 shares, total revenue is 8552.566116093665\n", 100 | "At time 17 ,sell: 1184 shares, total revenue is 9732.579895335104\n", 101 | "At time 18 ,sell: 160 shares, total revenue is 9892.381840802036\n", 102 | "At time 19 ,sell: 22 shares, total revenue is 9914.371731835614\n", 103 | "At time 20 ,sell: 3 shares, total revenue is 9902.186843142796\n" 104 | ], 105 | "name": "stdout" 106 | } 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "metadata": { 112 | "id": "8RpnN6FkQcgE", 113 | "colab_type": "code", 114 | "colab": {} 115 | }, 116 | "source": [ 117 | "" 118 | ], 119 | "execution_count": 0, 120 | "outputs": [] 121 | } 122 | ] 123 | } -------------------------------------------------------------------------------- /Optimal Trade Execution - Frank-Wolfe Algorithm.cp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | double gradient(double* vector, double alpha, double pi, int T) { 8 | double retcode = 0, sum = 0; 9 | int i; 10 | double* v; 11 | double* x = NULL, * impact = NULL, * temp = NULL, * temp0 = NULL; 12 | 13 | /*store the value of vector to x*/ 14 | x = (double*)calloc(2 * T, sizeof(double)); 15 | 16 | for (int i = 0; i < T; i++) { 17 | x[i] = vector[i]; 18 | } 19 | //std::cout << "x address" << x << "\n x value" << *x; 20 | 21 | 22 | /*calcuate the impact fuction of vector*/ 23 | for (i = 0; i < T; i++) { 24 | vector[i] = 1 - alpha * pow(vector[i], pi); 25 | } 26 | /*store the value of impact fuction to impact*/ 27 | impact = (double*)calloc(2 * T, sizeof(double)); 28 | 29 | for (int i = 0; i < T; i++) { 30 | impact[i] = vector[i]; 31 | } 32 | 33 | 34 | /*calcuate the cumprod of the impact fuction of vector*/ 35 | v = vector; 36 | 37 | for (i = 1; i < T; i++) { 38 | v[i] = vector[i] * v[i - 1]; 39 | } 40 | 41 | /*store the cumprod to temp0*/ 42 | temp0 = (double*)calloc(2 * T, sizeof(double)); 43 | 44 | for (int i = 0; i < T; i++) { 45 | temp0[i] = v[i]; 46 | } 47 | 48 | /*calculate the intermediate term */ 49 | for (i = 0; i < T; i++) { 50 | v[i] = v[i] * x[i]; 51 | } 52 | 53 | /*store the intermediate term to temp*/ 54 | temp = (double*)calloc(2 * T, sizeof(double)); 55 | 56 | for (int i = 0; i < T; i++) { 57 | temp[i] = v[i]; 58 | } 59 | 60 | /*calcuate term1 */ 61 | for (i = 0; i < T; i++) sum += v[i]; 62 | v[0] = sum; 63 | for (i = 1; i < T; i++) { 64 | v[i] = v[i - 1] - temp[i - 1]; 65 | } 66 | for (i = 0; i < T; i++) { 67 | v[i] = v[i] / impact[i]; 68 | } 69 | 70 | /*calcuate deri_impact */ 71 | for (i = 0; i < T; i++) { 72 | x[i] = -alpha * pi * pow(x[i], pi - 1); 73 | } 74 | /*calcuate part2 */ 75 | for (i = 0; i < T; i++) { 76 | v[i] = v[i] * x[i]; 77 | } 78 | /*calcuate gradient to v*/ 79 | for (i = 0; i < T; i++) { 80 | v[i] = temp0[i] + v[i]; 81 | } 82 | 83 | 84 | /*for (int i = 0; i < T; i++) { 85 | printf("gradient = %.20f", v[i]); 86 | printf("\n"); 87 | }*/ 88 | 89 | 90 | return retcode; 91 | } 92 | 93 | double my_function(double* vector, double alpha, double pi, int T) { 94 | double fun_val = 0; 95 | int i; 96 | double* v; 97 | double* x = NULL; 98 | 99 | /*store the value of vector to x*/ 100 | x = (double*)calloc(2 * T, sizeof(double)); 101 | 102 | for (int i = 0; i < T; i++) { 103 | x[i] = vector[i]; 104 | } 105 | 106 | double* vector_copy = NULL; 107 | vector_copy = (double*)calloc(2 * T, sizeof(double)); 108 | 109 | for (int i = 0; i < T; i++) { 110 | vector_copy[i] = vector[i]; 111 | } 112 | 113 | /*calcuate the impact fuction of vector*/ 114 | for (i = 0; i < T; i++) { 115 | vector_copy[i] = 1 - alpha * pow(vector_copy[i], pi); 116 | } 117 | 118 | /*calcuate the cumprod of the impact fuction of vector*/ 119 | 120 | for (i = 1; i < T; i++) { 121 | vector_copy[i] = vector_copy[i] * vector_copy[i - 1]; 122 | } 123 | 124 | /*calcuate the dop product of cumprod and x*/ 125 | for (i = 0; i < T; i++) { 126 | fun_val += vector_copy[i] * x[i]; 127 | } 128 | return fun_val; 129 | } 130 | 131 | double compute_slacks(double* vector, int N, int T) { 132 | double slacks = N; 133 | int i; 134 | for (i = 0; i < T; i++) { 135 | slacks -= vector[i]; 136 | } 137 | 138 | return slacks; 139 | } 140 | 141 | 142 | double line_search(double* vector, double* y, double alpha, double pi, int T, double step_size) { 143 | 144 | double max_t = 0, f = 0, t = 0; 145 | int i, j; 146 | double* x_new = NULL; 147 | x_new = (double*)calloc(2 * T, sizeof(double)); 148 | 149 | 150 | 151 | for (double i = 0; i <= 1; i = i + step_size) { 152 | 153 | /*x is the new vector after moving*/ 154 | for (int j = 0; j < T; j++) { 155 | x_new[j] = vector[j] + i * y[j]; 156 | } 157 | 158 | f = my_function(x_new, alpha, pi, T); 159 | 160 | if (f > max_t) { 161 | max_t = f; 162 | t = i; 163 | } 164 | } 165 | 166 | return t; 167 | } 168 | 169 | 170 | int direction(double* grad_vec, double* y, int T, int N, double* vector) 171 | { 172 | int retcode = 0; 173 | GRBenv* env = NULL; 174 | GRBmodel* model = NULL; 175 | int n, j, Nq; 176 | double* obj = NULL; 177 | double* lb = NULL; 178 | double* ub = NULL; 179 | double* x; 180 | int* cind, * qrow, * qcol; 181 | double rhs; 182 | char sense; 183 | double* cval, * qval; 184 | int numnonz; 185 | 186 | n = T; 187 | retcode = GRBloadenv(&env, "first.log"); 188 | if (retcode) goto BACK; 189 | 190 | /* Create initial model */ 191 | retcode = GRBnewmodel(env, &model, "first", n, 192 | NULL, NULL, NULL, NULL, NULL); 193 | if (retcode) goto BACK; 194 | 195 | /** next we create the 4 columns **/ 196 | obj = (double*)calloc(n, sizeof(double)); 197 | ub = (double*)calloc(n, sizeof(double)); 198 | lb = (double*)calloc(n, sizeof(double)); 199 | x = (double*)calloc(n, sizeof(double)); 200 | 201 | for (j = 0; j < n; j++) { 202 | obj[j] = -grad_vec[j]; //min -gradient 203 | } 204 | //obj[0] = 1; obj[1] = 2; obj[2] = 3; obj[3] = 4; obj[4] = 5; 205 | 206 | for (j = 0; j < n; j++) { 207 | ub[j] = N - vector[j]; 208 | } 209 | for (j = 0; j < n; j++) { 210 | lb[j] = -vector[j]; 211 | } 212 | 213 | /* initialize variables */ 214 | for (j = 0; j < n; j++) { 215 | retcode = GRBsetstrattrelement(model, "VarName", j, "NewConstr"); 216 | if (retcode) goto BACK; 217 | 218 | retcode = GRBsetdblattrelement(model, "Obj", j, obj[j]); 219 | if (retcode) goto BACK; 220 | 221 | retcode = GRBsetdblattrelement(model, "LB", j, lb[j]); 222 | if (retcode) goto BACK; 223 | 224 | retcode = GRBsetdblattrelement(model, "UB", j, ub[j]); 225 | if (retcode) goto BACK; 226 | } 227 | 228 | /** now we will add one constraint at a time **/ 229 | /** we need to have a couple of auxiliary arrays **/ 230 | 231 | cind = (int*)calloc(n, sizeof(int)); 232 | cval = (double*)calloc(n, sizeof(double)); 233 | 234 | 235 | /** constraint is sum all x = 0 **/ 236 | for (j = 0; j < n; j++) { 237 | cind[j] = j; 238 | } 239 | for (j = 0; j < n; j++) { 240 | cval[j] = 1; 241 | } 242 | 243 | numnonz = n; 244 | rhs = 0; // which equal the slacks 245 | sense = GRB_EQUAL; 246 | 247 | retcode = GRBaddconstr(model, numnonz, cind, cval, sense, rhs, "first_constraint"); 248 | if (retcode) goto BACK; 249 | 250 | retcode = GRBupdatemodel(model); 251 | if (retcode) goto BACK; 252 | 253 | 254 | /** optional: write the problem **/ 255 | 256 | //retcode = GRBwrite(model, "myfirst.lp"); 257 | //if (retcode) goto BACK; 258 | 259 | 260 | retcode = GRBoptimize(model); 261 | if (retcode) goto BACK; 262 | 263 | 264 | /** get solution **/ 265 | 266 | 267 | retcode = GRBgetdblattrarray(model, 268 | GRB_DBL_ATTR_X, 0, n, 269 | x); 270 | if (retcode) goto BACK; 271 | 272 | /** now let's see the values **/ 273 | 274 | //for (j = 0; j < n; j++) { 275 | // printf("variables = %g\n", x[j]); 276 | //} 277 | 278 | 279 | GRBfreeenv(env); 280 | 281 | for (int i = 0; i < T; i++) { 282 | y[i] = x[i]; 283 | } 284 | 285 | 286 | BACK: 287 | printf("\nexiting with retcode %d\n", retcode); 288 | return retcode; 289 | } 290 | 291 | 292 | int main() { 293 | int code = 0, slacks = 0; 294 | double alpha = 0.0001, pi = 0.5, c; 295 | double* vector = NULL; 296 | int i, N = 10000, T = 20; 297 | double* v; 298 | double step_size = 1E-4; 299 | int time = 1; 300 | 301 | /*initialize feasible solution x.(called vector)*/ 302 | vector = (double*)calloc(2 * T, sizeof(double)); 303 | 304 | 305 | for (int i = 0; i < T; i++) { 306 | c = (double)N / T; 307 | vector[i] = c; 308 | } 309 | 310 | //Get the original function value 311 | double old_f = my_function(vector, alpha, pi, T); //vector1 NOT changed now; 312 | printf("old funciton:%f", old_f); 313 | std::cout << "This is the " << time << " iteration"; 314 | time++; 315 | 316 | 317 | //Get the gradient for the current position vector 318 | double* grad_vec = NULL; 319 | grad_vec = (double*)calloc(2 * T, sizeof(double)); 320 | 321 | for (int i = 0; i < T; i++) { 322 | grad_vec[i] = vector[i]; 323 | } 324 | 325 | gradient(grad_vec, alpha, pi, T); // vector becomes the gradient 326 | 327 | //for (int i = 0; i < T; i++) { 328 | // printf("gradient = %.20f", grad_vec[i]); 329 | // printf("\n"); 330 | //} 331 | 332 | slacks = compute_slacks(grad_vec, N, T); // which always equals 0. So we are not using the computed slack in optimization. (just set to 0) 333 | 334 | 335 | /*compute step direction using gurobi, changing y */ 336 | double* y = NULL; 337 | y = (double*)calloc(T, sizeof(double)); 338 | direction(grad_vec, y, T, N, vector); 339 | 340 | // y is the step direction now; 341 | for (int i = 0; i < T; i++) { 342 | std::cout << "y " << i << " = " << y[i] << "\n"; 343 | } 344 | 345 | //line search to get the optimal t step 346 | double t = line_search(vector, y, alpha, pi, T, step_size); 347 | printf("t = %f", t); 348 | std::cout << "\n"; 349 | 350 | 351 | //update the original position to the new position 352 | for (int i = 0; i < T; i++) { 353 | vector[i] += t * y[i]; 354 | std::cout << "The Amount to be sold on day " << i << ": " << vector[i] << "\n"; 355 | } 356 | 357 | //get new function value after the 358 | double new_f = my_function(vector, alpha, pi, T); 359 | printf("new_function = %f", new_f); 360 | std::cout << "\n"; 361 | 362 | double diff = new_f - old_f; 363 | std::cout << "The Value Improvement is: " << diff << "\n"; 364 | 365 | 366 | //Continue iteration until reach certain condition 367 | while (diff > 1E-10) { 368 | 369 | std::cout << "This is the " << time << " iteration" << "\n"; 370 | time++; 371 | 372 | //Get the gradient for the current position vector 373 | double* grad_vec = NULL; 374 | grad_vec = (double*)calloc(2 * T, sizeof(double)); 375 | 376 | for (int i = 0; i < T; i++) { 377 | grad_vec[i] = vector[i]; 378 | } 379 | 380 | gradient(grad_vec, alpha, pi, T); // vector becomes the gradient 381 | 382 | //for (int i = 0; i < T; i++) { 383 | // printf("gradient = %.20f", grad_vec[i]); 384 | // printf("\n"); 385 | //} 386 | 387 | slacks = compute_slacks(grad_vec, N, T); // which always equals 0. So we are not using the computed slack in optimization. (just set to 0) 388 | 389 | /*compute step direction using gurobi, changing y */ 390 | double* y = NULL; 391 | y = (double*)calloc(T, sizeof(double)); 392 | direction(grad_vec, y, T, N, vector); 393 | 394 | // y is the step direction now; 395 | for (int i = 0; i < T; i++) { 396 | std::cout << "y " << i << " = " << y[i] << "\n"; 397 | } 398 | 399 | //line search to get the optimal t step 400 | double t = line_search(vector, y, alpha, pi, T, step_size); 401 | printf("t = %f", t); 402 | std::cout << "\n"; 403 | 404 | 405 | //update the original position to the new position 406 | for (int i = 0; i < T; i++) { 407 | vector[i] += t * y[i]; 408 | std::cout << "The Amount to be sold on day " << i << ": " << vector[i] << "\n"; 409 | } 410 | 411 | //avoid deep copy by updating diff first 412 | diff = my_function(vector, alpha, pi, T) - new_f; 413 | 414 | new_f = my_function(vector, alpha, pi, T); 415 | 416 | printf("new_function value = %f", new_f); 417 | std::cout << "\n"; 418 | std::cout << "The Value Improvement is: " << diff << "\n"; 419 | 420 | } 421 | 422 | return code; 423 | } 424 | 425 | 426 | -------------------------------------------------------------------------------- /Optimal Trade Execution - Frank-Wolfe Algoritm (Gurobi solver).ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 10, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import sys\n", 10 | "import math\n", 11 | "from gurobipy import *\n", 12 | "import numpy\n", 13 | "import pandas as pd\n", 14 | "import warnings\n", 15 | "warnings.filterwarnings(\"ignore\")" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": null, 21 | "metadata": {}, 22 | "outputs": [ 23 | { 24 | "name": "stdout", 25 | "output_type": "stream", 26 | "text": [ 27 | "initial feasible solution = \n", 28 | "[500. 500. 500. 500. 500. 500. 500. 500. 500. 500. 500. 500. 500. 500.\n", 29 | " 500. 500. 500. 500. 500. 500.]\n", 30 | "hello, value = 9768.504658048427\n", 31 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 32 | "Coefficient statistics:\n", 33 | " Matrix range [1e+00, 1e+00]\n", 34 | " Objective range [1e+00, 1e+00]\n", 35 | " Bounds range [5e+02, 1e+04]\n", 36 | " RHS range [0e+00, 0e+00]\n", 37 | "Presolve removed 1 rows and 20 columns\n", 38 | "Presolve time: 0.01s\n", 39 | "Presolve: All rows and columns removed\n", 40 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 41 | " 0 -1.0433299e+02 0.000000e+00 0.000000e+00 0s\n", 42 | "\n", 43 | "Solved in 0 iterations and 0.02 seconds\n", 44 | "Optimal objective -1.043329874e+02\n", 45 | " -> LP optimal, value = -104.333\n", 46 | "\n", 47 | "deltasol: [9500. -500. -500. -500. -500. -500. -500. -500. -500. -500. -500. -500.\n", 48 | " -500. -500. -500. -500. -500. -500. -500. -500.]\n", 49 | "step_size: 0.9766\n", 50 | "x: [9777.7 11.7 11.7 11.7 11.7 11.7 11.7 11.7 11.7 11.7\n", 51 | " 11.7 11.7 11.7 11.7 11.7 11.7 11.7 11.7 11.7 11.7]\n", 52 | "hello, value = 9900.36642550803\n", 53 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 54 | "Coefficient statistics:\n", 55 | " Matrix range [1e+00, 1e+00]\n", 56 | " Objective range [1e+00, 1e+00]\n", 57 | " Bounds range [1e+01, 1e+04]\n", 58 | " RHS range [0e+00, 0e+00]\n", 59 | "Presolve removed 1 rows and 20 columns\n", 60 | "Presolve time: 0.01s\n", 61 | "Presolve: All rows and columns removed\n", 62 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 63 | " 0 -1.5102056e+01 0.000000e+00 0.000000e+00 0s\n", 64 | "\n", 65 | "Solved in 0 iterations and 0.02 seconds\n", 66 | "Optimal objective -1.510205553e+01\n", 67 | " -> LP optimal, value = -15.1021\n", 68 | "\n", 69 | "deltasol: [-9777.7 9988.3 -11.7 -11.7 -11.7 -11.7 -11.7 -11.7 -11.7\n", 70 | " -11.7 -11.7 -11.7 -11.7 -11.7 -11.7 -11.7 -11.7 -11.7\n", 71 | " -11.7 -11.7]\n", 72 | "step_size: 0.12050000000000001\n", 73 | "x: [8599.48715 1215.29015 10.29015 10.29015 10.29015 10.29015\n", 74 | " 10.29015 10.29015 10.29015 10.29015 10.29015 10.29015\n", 75 | " 10.29015 10.29015 10.29015 10.29015 10.29015 10.29015\n", 76 | " 10.29015 10.29015]\n", 77 | "hello, value = 9901.873267602747\n", 78 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 79 | "Coefficient statistics:\n", 80 | " Matrix range [1e+00, 1e+00]\n", 81 | " Objective range [1e+00, 1e+00]\n", 82 | " Bounds range [1e+01, 1e+04]\n", 83 | " RHS range [0e+00, 0e+00]\n", 84 | "Presolve removed 1 rows and 20 columns\n", 85 | "Presolve time: 0.01s\n", 86 | "Presolve: All rows and columns removed\n", 87 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 88 | " 0 -5.4131708e-01 0.000000e+00 0.000000e+00 0s\n", 89 | "\n", 90 | "Solved in 0 iterations and 0.02 seconds\n", 91 | "Optimal objective -5.413170823e-01\n", 92 | " -> LP optimal, value = -0.541317\n", 93 | "\n", 94 | "deltasol: [ 1400.51285 -1215.29015 -10.29015 -10.29015 -10.29015 -10.29015\n", 95 | " -10.29015 -10.29015 -10.29015 -10.29015 -10.29015 -10.29015\n", 96 | " -10.29015 -10.29015 -10.29015 -10.29015 -10.29015 -10.29015\n", 97 | " -10.29015 -10.29015]\n", 98 | "step_size: 0.14980000000000002\n", 99 | "x: [8.80928397e+03 1.03323969e+03 8.74868553e+00 8.74868553e+00\n", 100 | " 8.74868553e+00 8.74868553e+00 8.74868553e+00 8.74868553e+00\n", 101 | " 8.74868553e+00 8.74868553e+00 8.74868553e+00 8.74868553e+00\n", 102 | " 8.74868553e+00 8.74868553e+00 8.74868553e+00 8.74868553e+00\n", 103 | " 8.74868553e+00 8.74868553e+00 8.74868553e+00 8.74868553e+00]\n", 104 | "hello, value = 9901.91449125802\n", 105 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 106 | "Coefficient statistics:\n", 107 | " Matrix range [1e+00, 1e+00]\n", 108 | " Objective range [1e+00, 1e+00]\n", 109 | " Bounds range [9e+00, 1e+04]\n", 110 | " RHS range [0e+00, 0e+00]\n", 111 | "Presolve removed 1 rows and 20 columns\n", 112 | "Presolve time: 0.01s\n", 113 | "Presolve: All rows and columns removed\n", 114 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 115 | " 0 -3.0661134e+00 0.000000e+00 0.000000e+00 0s\n", 116 | "\n", 117 | "Solved in 0 iterations and 0.01 seconds\n", 118 | "Optimal objective -3.066113394e+00\n", 119 | " -> LP optimal, value = -3.06611\n", 120 | "\n", 121 | "deltasol: [-8.80928397e+03 8.96676031e+03 -8.74868553e+00 -8.74868553e+00\n", 122 | " -8.74868553e+00 -8.74868553e+00 -8.74868553e+00 -8.74868553e+00\n", 123 | " -8.74868553e+00 -8.74868553e+00 -8.74868553e+00 -8.74868553e+00\n", 124 | " -8.74868553e+00 -8.74868553e+00 -8.74868553e+00 -8.74868553e+00\n", 125 | " -8.74868553e+00 -8.74868553e+00 -8.74868553e+00 -8.74868553e+00]\n", 126 | "step_size: 0.021500000000000002\n", 127 | "x: [8.61988437e+03 1.22602503e+03 8.56058879e+00 8.56058879e+00\n", 128 | " 8.56058879e+00 8.56058879e+00 8.56058879e+00 8.56058879e+00\n", 129 | " 8.56058879e+00 8.56058879e+00 8.56058879e+00 8.56058879e+00\n", 130 | " 8.56058879e+00 8.56058879e+00 8.56058879e+00 8.56058879e+00\n", 131 | " 8.56058879e+00 8.56058879e+00 8.56058879e+00 8.56058879e+00]\n", 132 | "hello, value = 9901.946967301683\n", 133 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 134 | "Coefficient statistics:\n", 135 | " Matrix range [1e+00, 1e+00]\n", 136 | " Objective range [1e+00, 1e+00]\n", 137 | " Bounds range [9e+00, 1e+04]\n", 138 | " RHS range [0e+00, 0e+00]\n", 139 | "Presolve removed 1 rows and 20 columns\n", 140 | "Presolve time: 0.01s\n", 141 | "Presolve: All rows and columns removed\n", 142 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 143 | " 0 -3.8487021e-01 0.000000e+00 0.000000e+00 0s\n", 144 | "\n", 145 | "Solved in 0 iterations and 0.01 seconds\n", 146 | "Optimal objective -3.848702139e-01\n", 147 | " -> LP optimal, value = -0.38487\n", 148 | "\n", 149 | "deltasol: [ 1380.11563053 -1226.02503229 -8.56058879 -8.56058879\n", 150 | " -8.56058879 -8.56058879 -8.56058879 -8.56058879\n", 151 | " -8.56058879 -8.56058879 -8.56058879 -8.56058879\n", 152 | " -8.56058879 -8.56058879 -8.56058879 -8.56058879\n", 153 | " -8.56058879 -8.56058879 -8.56058879 -8.56058879]\n", 154 | "step_size: 0.11170000000000001\n", 155 | "x: [8.77404329e+03 1.08907804e+03 7.60437102e+00 7.60437102e+00\n", 156 | " 7.60437102e+00 7.60437102e+00 7.60437102e+00 7.60437102e+00\n", 157 | " 7.60437102e+00 7.60437102e+00 7.60437102e+00 7.60437102e+00\n", 158 | " 7.60437102e+00 7.60437102e+00 7.60437102e+00 7.60437102e+00\n", 159 | " 7.60437102e+00 7.60437102e+00 7.60437102e+00 7.60437102e+00]\n", 160 | "hello, value = 9901.968731254352\n", 161 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 162 | "Coefficient statistics:\n", 163 | " Matrix range [1e+00, 1e+00]\n", 164 | " Objective range [1e+00, 1e+00]\n", 165 | " Bounds range [8e+00, 1e+04]\n", 166 | " RHS range [0e+00, 0e+00]\n", 167 | "Presolve removed 1 rows and 20 columns\n", 168 | "Presolve time: 0.01s\n", 169 | "Presolve: All rows and columns removed\n", 170 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 171 | " 0 -2.2684220e+00 0.000000e+00 0.000000e+00 0s\n", 172 | "\n", 173 | "Solved in 0 iterations and 0.03 seconds\n", 174 | "Optimal objective -2.268421978e+00\n", 175 | " -> LP optimal, value = -2.26842\n", 176 | "\n", 177 | "deltasol: [-8.77404329e+03 8.91092196e+03 -7.60437102e+00 -7.60437102e+00\n", 178 | " -7.60437102e+00 -7.60437102e+00 -7.60437102e+00 -7.60437102e+00\n", 179 | " -7.60437102e+00 -7.60437102e+00 -7.60437102e+00 -7.60437102e+00\n", 180 | " -7.60437102e+00 -7.60437102e+00 -7.60437102e+00 -7.60437102e+00\n", 181 | " -7.60437102e+00 -7.60437102e+00 -7.60437102e+00 -7.60437102e+00]\n", 182 | "step_size: 0.0162\n", 183 | "x: [8.63190378e+03 1.23343497e+03 7.48118021e+00 7.48118021e+00\n", 184 | " 7.48118021e+00 7.48118021e+00 7.48118021e+00 7.48118021e+00\n", 185 | " 7.48118021e+00 7.48118021e+00 7.48118021e+00 7.48118021e+00\n", 186 | " 7.48118021e+00 7.48118021e+00 7.48118021e+00 7.48118021e+00\n", 187 | " 7.48118021e+00 7.48118021e+00 7.48118021e+00 7.48118021e+00]\n", 188 | "hello, value = 9901.986904298745\n", 189 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 190 | "Coefficient statistics:\n", 191 | " Matrix range [1e+00, 1e+00]\n", 192 | " Objective range [1e+00, 1e+00]\n", 193 | " Bounds range [7e+00, 1e+04]\n", 194 | " RHS range [0e+00, 0e+00]\n", 195 | "Presolve removed 1 rows and 20 columns\n", 196 | "Presolve time: 0.01s\n", 197 | "Presolve: All rows and columns removed\n", 198 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 199 | " 0 -2.9786712e-01 0.000000e+00 0.000000e+00 0s\n", 200 | "\n", 201 | "Solved in 0 iterations and 0.01 seconds\n", 202 | "Optimal objective -2.978671210e-01\n", 203 | " -> LP optimal, value = -0.297867\n", 204 | "\n", 205 | "deltasol: [ 1368.09621582 -1233.434972 -7.48118021 -7.48118021\n", 206 | " -7.48118021 -7.48118021 -7.48118021 -7.48118021\n", 207 | " -7.48118021 -7.48118021 -7.48118021 -7.48118021\n", 208 | " -7.48118021 -7.48118021 -7.48118021 -7.48118021\n", 209 | " -7.48118021 -7.48118021 -7.48118021 -7.48118021]\n", 210 | "step_size: 0.0889\n", 211 | "x: [8.75352754e+03 1.12378260e+03 6.81610329e+00 6.81610329e+00\n", 212 | " 6.81610329e+00 6.81610329e+00 6.81610329e+00 6.81610329e+00\n", 213 | " 6.81610329e+00 6.81610329e+00 6.81610329e+00 6.81610329e+00\n", 214 | " 6.81610329e+00 6.81610329e+00 6.81610329e+00 6.81610329e+00\n", 215 | " 6.81610329e+00 6.81610329e+00 6.81610329e+00 6.81610329e+00]\n", 216 | "hello, value = 9902.000275903967\n", 217 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n" 218 | ] 219 | }, 220 | { 221 | "name": "stdout", 222 | "output_type": "stream", 223 | "text": [ 224 | "Coefficient statistics:\n", 225 | " Matrix range [1e+00, 1e+00]\n", 226 | " Objective range [1e+00, 1e+00]\n", 227 | " Bounds range [7e+00, 1e+04]\n", 228 | " RHS range [0e+00, 0e+00]\n", 229 | "Presolve removed 1 rows and 20 columns\n", 230 | "Presolve time: 0.01s\n", 231 | "Presolve: All rows and columns removed\n", 232 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 233 | " 0 -1.7954365e+00 0.000000e+00 0.000000e+00 0s\n", 234 | "\n", 235 | "Solved in 0 iterations and 0.02 seconds\n", 236 | "Optimal objective -1.795436506e+00\n", 237 | " -> LP optimal, value = -1.79544\n", 238 | "\n", 239 | "deltasol: [-8.75352754e+03 8.87621740e+03 -6.81610329e+00 -6.81610329e+00\n", 240 | " -6.81610329e+00 -6.81610329e+00 -6.81610329e+00 -6.81610329e+00\n", 241 | " -6.81610329e+00 -6.81610329e+00 -6.81610329e+00 -6.81610329e+00\n", 242 | " -6.81610329e+00 -6.81610329e+00 -6.81610329e+00 -6.81610329e+00\n", 243 | " -6.81610329e+00 -6.81610329e+00 -6.81610329e+00 -6.81610329e+00]\n", 244 | "step_size: 0.013000000000000001\n", 245 | "x: [8.63973168e+03 1.23917343e+03 6.72749395e+00 6.72749395e+00\n", 246 | " 6.72749395e+00 6.72749395e+00 6.72749395e+00 6.72749395e+00\n", 247 | " 6.72749395e+00 6.72749395e+00 6.72749395e+00 6.72749395e+00\n", 248 | " 6.72749395e+00 6.72749395e+00 6.72749395e+00 6.72749395e+00\n", 249 | " 6.72749395e+00 6.72749395e+00 6.72749395e+00 6.72749395e+00]\n", 250 | "hello, value = 9902.011811238672\n", 251 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 252 | "Coefficient statistics:\n", 253 | " Matrix range [1e+00, 1e+00]\n", 254 | " Objective range [1e+00, 1e+00]\n", 255 | " Bounds range [7e+00, 1e+04]\n", 256 | " RHS range [0e+00, 0e+00]\n", 257 | "Presolve removed 1 rows and 20 columns\n", 258 | "Presolve time: 0.01s\n", 259 | "Presolve: All rows and columns removed\n", 260 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 261 | " 0 -2.4284097e-01 0.000000e+00 0.000000e+00 0s\n", 262 | "\n", 263 | "Solved in 0 iterations and 0.01 seconds\n", 264 | "Optimal objective -2.428409749e-01\n", 265 | " -> LP optimal, value = -0.242841\n", 266 | "\n", 267 | "deltasol: [ 1360.26832023 -1239.17342915 -6.72749395 -6.72749395\n", 268 | " -6.72749395 -6.72749395 -6.72749395 -6.72749395\n", 269 | " -6.72749395 -6.72749395 -6.72749395 -6.72749395\n", 270 | " -6.72749395 -6.72749395 -6.72749395 -6.72749395\n", 271 | " -6.72749395 -6.72749395 -6.72749395 -6.72749395]\n", 272 | "step_size: 0.0738\n", 273 | "x: [8.74011948e+03 1.14772243e+03 6.23100490e+00 6.23100490e+00\n", 274 | " 6.23100490e+00 6.23100490e+00 6.23100490e+00 6.23100490e+00\n", 275 | " 6.23100490e+00 6.23100490e+00 6.23100490e+00 6.23100490e+00\n", 276 | " 6.23100490e+00 6.23100490e+00 6.23100490e+00 6.23100490e+00\n", 277 | " 6.23100490e+00 6.23100490e+00 6.23100490e+00 6.23100490e+00]\n", 278 | "hello, value = 9902.020846966841\n", 279 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 280 | "Coefficient statistics:\n", 281 | " Matrix range [1e+00, 1e+00]\n", 282 | " Objective range [1e+00, 1e+00]\n", 283 | " Bounds range [6e+00, 1e+04]\n", 284 | " RHS range [0e+00, 0e+00]\n", 285 | "Presolve removed 1 rows and 20 columns\n", 286 | "Presolve time: 0.01s\n", 287 | "Presolve: All rows and columns removed\n", 288 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 289 | " 0 -1.4803446e+00 0.000000e+00 0.000000e+00 0s\n", 290 | "\n", 291 | "Solved in 0 iterations and 0.01 seconds\n", 292 | "Optimal objective -1.480344592e+00\n", 293 | " -> LP optimal, value = -1.48034\n", 294 | "\n", 295 | "deltasol: [-8.74011948e+03 8.85227757e+03 -6.23100490e+00 -6.23100490e+00\n", 296 | " -6.23100490e+00 -6.23100490e+00 -6.23100490e+00 -6.23100490e+00\n", 297 | " -6.23100490e+00 -6.23100490e+00 -6.23100490e+00 -6.23100490e+00\n", 298 | " -6.23100490e+00 -6.23100490e+00 -6.23100490e+00 -6.23100490e+00\n", 299 | " -6.23100490e+00 -6.23100490e+00 -6.23100490e+00 -6.23100490e+00]\n", 300 | "step_size: 0.0108\n", 301 | "x: [8.64572619e+03 1.24332703e+03 6.16371004e+00 6.16371004e+00\n", 302 | " 6.16371004e+00 6.16371004e+00 6.16371004e+00 6.16371004e+00\n", 303 | " 6.16371004e+00 6.16371004e+00 6.16371004e+00 6.16371004e+00\n", 304 | " 6.16371004e+00 6.16371004e+00 6.16371004e+00 6.16371004e+00\n", 305 | " 6.16371004e+00 6.16371004e+00 6.16371004e+00 6.16371004e+00]\n", 306 | "hello, value = 9902.028757915754\n", 307 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 308 | "Coefficient statistics:\n", 309 | " Matrix range [1e+00, 1e+00]\n", 310 | " Objective range [1e+00, 1e+00]\n", 311 | " Bounds range [6e+00, 1e+04]\n", 312 | " RHS range [0e+00, 0e+00]\n", 313 | "Presolve removed 1 rows and 20 columns\n", 314 | "Presolve time: 0.01s\n", 315 | "Presolve: All rows and columns removed\n", 316 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 317 | " 0 -2.0387635e-01 0.000000e+00 0.000000e+00 0s\n", 318 | "\n", 319 | "Solved in 0 iterations and 0.02 seconds\n", 320 | "Optimal objective -2.038763520e-01\n", 321 | " -> LP optimal, value = -0.203876\n", 322 | "\n", 323 | "deltasol: [ 1354.2738086 -1243.32702783 -6.16371004 -6.16371004\n", 324 | " -6.16371004 -6.16371004 -6.16371004 -6.16371004\n", 325 | " -6.16371004 -6.16371004 -6.16371004 -6.16371004\n", 326 | " -6.16371004 -6.16371004 -6.16371004 -6.16371004\n", 327 | " -6.16371004 -6.16371004 -6.16371004 -6.16371004]\n", 328 | "step_size: 0.06280000000000001\n", 329 | "x: [8.73077459e+03 1.16524609e+03 5.77662905e+00 5.77662905e+00\n", 330 | " 5.77662905e+00 5.77662905e+00 5.77662905e+00 5.77662905e+00\n", 331 | " 5.77662905e+00 5.77662905e+00 5.77662905e+00 5.77662905e+00\n", 332 | " 5.77662905e+00 5.77662905e+00 5.77662905e+00 5.77662905e+00\n", 333 | " 5.77662905e+00 5.77662905e+00 5.77662905e+00 5.77662905e+00]\n", 334 | "hello, value = 9902.035204518557\n", 335 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 336 | "Coefficient statistics:\n", 337 | " Matrix range [1e+00, 1e+00]\n", 338 | " Objective range [1e+00, 1e+00]\n", 339 | " Bounds range [6e+00, 1e+04]\n", 340 | " RHS range [0e+00, 0e+00]\n", 341 | "Presolve removed 1 rows and 20 columns\n", 342 | "Presolve time: 0.01s\n", 343 | "Presolve: All rows and columns removed\n", 344 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 345 | " 0 -1.2562031e+00 0.000000e+00 0.000000e+00 0s\n", 346 | "\n", 347 | "Solved in 0 iterations and 0.02 seconds\n", 348 | "Optimal objective -1.256203134e+00\n", 349 | " -> LP optimal, value = -1.2562\n", 350 | "\n", 351 | "deltasol: [-8.73077459e+03 8.83475391e+03 -5.77662905e+00 -5.77662905e+00\n", 352 | " -5.77662905e+00 -5.77662905e+00 -5.77662905e+00 -5.77662905e+00\n", 353 | " -5.77662905e+00 -5.77662905e+00 -5.77662905e+00 -5.77662905e+00\n", 354 | " -5.77662905e+00 -5.77662905e+00 -5.77662905e+00 -5.77662905e+00\n", 355 | " -5.77662905e+00 -5.77662905e+00 -5.77662905e+00 -5.77662905e+00]\n", 356 | "step_size: 0.0092\n", 357 | "x: [8.65045146e+03 1.24652583e+03 5.72348406e+00 5.72348406e+00\n", 358 | " 5.72348406e+00 5.72348406e+00 5.72348406e+00 5.72348406e+00\n", 359 | " 5.72348406e+00 5.72348406e+00 5.72348406e+00 5.72348406e+00\n", 360 | " 5.72348406e+00 5.72348406e+00 5.72348406e+00 5.72348406e+00\n", 361 | " 5.72348406e+00 5.72348406e+00 5.72348406e+00 5.72348406e+00]\n", 362 | "hello, value = 9902.040936950689\n", 363 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 364 | "Coefficient statistics:\n", 365 | " Matrix range [1e+00, 1e+00]\n", 366 | " Objective range [1e+00, 1e+00]\n", 367 | " Bounds range [6e+00, 1e+04]\n", 368 | " RHS range [0e+00, 0e+00]\n", 369 | "Presolve removed 1 rows and 20 columns\n", 370 | "Presolve time: 0.01s\n", 371 | "Presolve: All rows and columns removed\n", 372 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 373 | " 0 -1.7492172e-01 0.000000e+00 0.000000e+00 0s\n", 374 | "\n", 375 | "Solved in 0 iterations and 0.02 seconds\n", 376 | "Optimal objective -1.749217199e-01\n", 377 | " -> LP optimal, value = -0.174922\n", 378 | "\n", 379 | "deltasol: [ 1349.54853962 -1246.52582645 -5.72348406 -5.72348406\n", 380 | " -5.72348406 -5.72348406 -5.72348406 -5.72348406\n", 381 | " -5.72348406 -5.72348406 -5.72348406 -5.72348406\n", 382 | " -5.72348406 -5.72348406 -5.72348406 -5.72348406\n", 383 | " -5.72348406 -5.72348406 -5.72348406 -5.72348406]\n", 384 | "step_size: 0.054400000000000004\n", 385 | "x: [8.72386690e+03 1.17871482e+03 5.41212653e+00 5.41212653e+00\n", 386 | " 5.41212653e+00 5.41212653e+00 5.41212653e+00 5.41212653e+00\n", 387 | " 5.41212653e+00 5.41212653e+00 5.41212653e+00 5.41212653e+00\n", 388 | " 5.41212653e+00 5.41212653e+00 5.41212653e+00 5.41212653e+00\n", 389 | " 5.41212653e+00 5.41212653e+00 5.41212653e+00 5.41212653e+00]\n", 390 | "hello, value = 9902.045726793896\n", 391 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 392 | "Coefficient statistics:\n", 393 | " Matrix range [1e+00, 1e+00]\n", 394 | " Objective range [1e+00, 1e+00]\n", 395 | " Bounds range [5e+00, 1e+04]\n", 396 | " RHS range [0e+00, 0e+00]\n", 397 | "Presolve removed 1 rows and 20 columns\n", 398 | "Presolve time: 0.01s\n", 399 | "Presolve: All rows and columns removed\n", 400 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 401 | " 0 -1.0877835e+00 0.000000e+00 0.000000e+00 0s\n", 402 | "\n", 403 | "Solved in 0 iterations and 0.01 seconds\n", 404 | "Optimal objective -1.087783530e+00\n", 405 | " -> LP optimal, value = -1.08778\n", 406 | "\n", 407 | "deltasol: [-8.72386690e+03 8.82128518e+03 -5.41212653e+00 -5.41212653e+00\n", 408 | " -5.41212653e+00 -5.41212653e+00 -5.41212653e+00 -5.41212653e+00\n", 409 | " -5.41212653e+00 -5.41212653e+00 -5.41212653e+00 -5.41212653e+00\n", 410 | " -5.41212653e+00 -5.41212653e+00 -5.41212653e+00 -5.41212653e+00\n", 411 | " -5.41212653e+00 -5.41212653e+00 -5.41212653e+00 -5.41212653e+00]\n" 412 | ] 413 | }, 414 | { 415 | "name": "stdout", 416 | "output_type": "stream", 417 | "text": [ 418 | "step_size: 0.008\n", 419 | "x: [8.65407597e+03 1.24928510e+03 5.36882952e+00 5.36882952e+00\n", 420 | " 5.36882952e+00 5.36882952e+00 5.36882952e+00 5.36882952e+00\n", 421 | " 5.36882952e+00 5.36882952e+00 5.36882952e+00 5.36882952e+00\n", 422 | " 5.36882952e+00 5.36882952e+00 5.36882952e+00 5.36882952e+00\n", 423 | " 5.36882952e+00 5.36882952e+00 5.36882952e+00 5.36882952e+00]\n", 424 | "hello, value = 9902.05004542283\n", 425 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 426 | "Coefficient statistics:\n", 427 | " Matrix range [1e+00, 1e+00]\n", 428 | " Objective range [1e+00, 1e+00]\n", 429 | " Bounds range [5e+00, 1e+04]\n", 430 | " RHS range [0e+00, 0e+00]\n", 431 | "Presolve removed 1 rows and 20 columns\n", 432 | "Presolve time: 0.01s\n", 433 | "Presolve: All rows and columns removed\n", 434 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 435 | " 0 -1.5305935e-01 0.000000e+00 0.000000e+00 0s\n", 436 | "\n", 437 | "Solved in 0 iterations and 0.01 seconds\n", 438 | "Optimal objective -1.530593479e-01\n", 439 | " -> LP optimal, value = -0.153059\n", 440 | "\n", 441 | "deltasol: [ 1345.92403427 -1249.28510292 -5.36882952 -5.36882952\n", 442 | " -5.36882952 -5.36882952 -5.36882952 -5.36882952\n", 443 | " -5.36882952 -5.36882952 -5.36882952 -5.36882952\n", 444 | " -5.36882952 -5.36882952 -5.36882952 -5.36882952\n", 445 | " -5.36882952 -5.36882952 -5.36882952 -5.36882952]\n", 446 | "step_size: 0.048\n", 447 | "x: [8.71868032e+03 1.18931942e+03 5.11112570e+00 5.11112570e+00\n", 448 | " 5.11112570e+00 5.11112570e+00 5.11112570e+00 5.11112570e+00\n", 449 | " 5.11112570e+00 5.11112570e+00 5.11112570e+00 5.11112570e+00\n", 450 | " 5.11112570e+00 5.11112570e+00 5.11112570e+00 5.11112570e+00\n", 451 | " 5.11112570e+00 5.11112570e+00 5.11112570e+00 5.11112570e+00]\n", 452 | "hello, value = 9902.05373895651\n", 453 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 454 | "Coefficient statistics:\n", 455 | " Matrix range [1e+00, 1e+00]\n", 456 | " Objective range [1e+00, 1e+00]\n", 457 | " Bounds range [5e+00, 1e+04]\n", 458 | " RHS range [0e+00, 0e+00]\n", 459 | "Presolve removed 1 rows and 20 columns\n", 460 | "Presolve time: 0.01s\n", 461 | "Presolve: All rows and columns removed\n", 462 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 463 | " 0 -9.5819294e-01 0.000000e+00 0.000000e+00 0s\n", 464 | "\n", 465 | "Solved in 0 iterations and 0.01 seconds\n", 466 | "Optimal objective -9.581929450e-01\n", 467 | " -> LP optimal, value = -0.958193\n", 468 | "\n", 469 | "deltasol: [-8.71868032e+03 8.81068058e+03 -5.11112570e+00 -5.11112570e+00\n", 470 | " -5.11112570e+00 -5.11112570e+00 -5.11112570e+00 -5.11112570e+00\n", 471 | " -5.11112570e+00 -5.11112570e+00 -5.11112570e+00 -5.11112570e+00\n", 472 | " -5.11112570e+00 -5.11112570e+00 -5.11112570e+00 -5.11112570e+00\n", 473 | " -5.11112570e+00 -5.11112570e+00 -5.11112570e+00 -5.11112570e+00]\n", 474 | "step_size: 0.0071\n", 475 | "x: [8.65677769e+03 1.25187525e+03 5.07483671e+00 5.07483671e+00\n", 476 | " 5.07483671e+00 5.07483671e+00 5.07483671e+00 5.07483671e+00\n", 477 | " 5.07483671e+00 5.07483671e+00 5.07483671e+00 5.07483671e+00\n", 478 | " 5.07483671e+00 5.07483671e+00 5.07483671e+00 5.07483671e+00\n", 479 | " 5.07483671e+00 5.07483671e+00 5.07483671e+00 5.07483671e+00]\n", 480 | "hello, value = 9902.05710188326\n", 481 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 482 | "Coefficient statistics:\n", 483 | " Matrix range [1e+00, 1e+00]\n", 484 | " Objective range [1e+00, 1e+00]\n", 485 | " Bounds range [5e+00, 1e+04]\n", 486 | " RHS range [0e+00, 0e+00]\n", 487 | "Presolve removed 1 rows and 20 columns\n", 488 | "Presolve time: 0.01s\n", 489 | "Presolve: All rows and columns removed\n", 490 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 491 | " 0 -1.3636338e-01 0.000000e+00 0.000000e+00 0s\n", 492 | "\n", 493 | "Solved in 0 iterations and 0.02 seconds\n", 494 | "Optimal objective -1.363633833e-01\n", 495 | " -> LP optimal, value = -0.136363\n", 496 | "\n", 497 | "deltasol: [ 1343.22231089 -1251.87525011 -5.07483671 -5.07483671\n", 498 | " -5.07483671 -5.07483671 -5.07483671 -5.07483671\n", 499 | " -5.07483671 -5.07483671 -5.07483671 -5.07483671\n", 500 | " -5.07483671 -5.07483671 -5.07483671 -5.07483671\n", 501 | " -5.07483671 -5.07483671 -5.07483671 -5.07483671]\n", 502 | "step_size: 0.043000000000000003\n", 503 | "x: [8.71453625e+03 1.19804461e+03 4.85661873e+00 4.85661873e+00\n", 504 | " 4.85661873e+00 4.85661873e+00 4.85661873e+00 4.85661873e+00\n", 505 | " 4.85661873e+00 4.85661873e+00 4.85661873e+00 4.85661873e+00\n", 506 | " 4.85661873e+00 4.85661873e+00 4.85661873e+00 4.85661873e+00\n", 507 | " 4.85661873e+00 4.85661873e+00 4.85661873e+00 4.85661873e+00]\n", 508 | "hello, value = 9902.06004950871\n", 509 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 510 | "Coefficient statistics:\n", 511 | " Matrix range [1e+00, 1e+00]\n", 512 | " Objective range [1e+00, 1e+00]\n", 513 | " Bounds range [5e+00, 1e+04]\n", 514 | " RHS range [0e+00, 0e+00]\n", 515 | "Presolve removed 1 rows and 20 columns\n", 516 | "Presolve time: 0.01s\n", 517 | "Presolve: All rows and columns removed\n", 518 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 519 | " 0 -8.5329248e-01 0.000000e+00 0.000000e+00 0s\n", 520 | "\n", 521 | "Solved in 0 iterations and 0.01 seconds\n", 522 | "Optimal objective -8.532924792e-01\n", 523 | " -> LP optimal, value = -0.853292\n", 524 | "\n", 525 | "deltasol: [-8.71453625e+03 8.80195539e+03 -4.85661873e+00 -4.85661873e+00\n", 526 | " -4.85661873e+00 -4.85661873e+00 -4.85661873e+00 -4.85661873e+00\n", 527 | " -4.85661873e+00 -4.85661873e+00 -4.85661873e+00 -4.85661873e+00\n", 528 | " -4.85661873e+00 -4.85661873e+00 -4.85661873e+00 -4.85661873e+00\n", 529 | " -4.85661873e+00 -4.85661873e+00 -4.85661873e+00 -4.85661873e+00]\n", 530 | "step_size: 0.0063\n", 531 | "x: [8.65963467e+03 1.25349693e+03 4.82602203e+00 4.82602203e+00\n", 532 | " 4.82602203e+00 4.82602203e+00 4.82602203e+00 4.82602203e+00\n", 533 | " 4.82602203e+00 4.82602203e+00 4.82602203e+00 4.82602203e+00\n", 534 | " 4.82602203e+00 4.82602203e+00 4.82602203e+00 4.82602203e+00\n", 535 | " 4.82602203e+00 4.82602203e+00 4.82602203e+00 4.82602203e+00]\n", 536 | "hello, value = 9902.062724336103\n", 537 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 538 | "Coefficient statistics:\n", 539 | " Matrix range [1e+00, 1e+00]\n", 540 | " Objective range [1e+00, 1e+00]\n", 541 | " Bounds range [5e+00, 1e+04]\n", 542 | " RHS range [0e+00, 0e+00]\n", 543 | "Presolve removed 1 rows and 20 columns\n", 544 | "Presolve time: 0.01s\n", 545 | "Presolve: All rows and columns removed\n", 546 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 547 | " 0 -1.2145628e-01 0.000000e+00 0.000000e+00 0s\n", 548 | "\n", 549 | "Solved in 0 iterations and 0.01 seconds\n", 550 | "Optimal objective -1.214562768e-01\n", 551 | " -> LP optimal, value = -0.121456\n", 552 | "\n", 553 | "deltasol: [ 1340.36532989 -1253.49693329 -4.82602203 -4.82602203\n", 554 | " -4.82602203 -4.82602203 -4.82602203 -4.82602203\n", 555 | " -4.82602203 -4.82602203 -4.82602203 -4.82602203\n", 556 | " -4.82602203 -4.82602203 -4.82602203 -4.82602203\n", 557 | " -4.82602203 -4.82602203 -4.82602203 -4.82602203]\n", 558 | "step_size: 0.0385\n", 559 | "x: [8.71123874e+03 1.20523730e+03 4.64022019e+00 4.64022019e+00\n", 560 | " 4.64022019e+00 4.64022019e+00 4.64022019e+00 4.64022019e+00\n", 561 | " 4.64022019e+00 4.64022019e+00 4.64022019e+00 4.64022019e+00\n", 562 | " 4.64022019e+00 4.64022019e+00 4.64022019e+00 4.64022019e+00\n", 563 | " 4.64022019e+00 4.64022019e+00 4.64022019e+00 4.64022019e+00]\n", 564 | "hello, value = 9902.065074795179\n", 565 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 566 | "Coefficient statistics:\n", 567 | " Matrix range [1e+00, 1e+00]\n", 568 | " Objective range [1e+00, 1e+00]\n", 569 | " Bounds range [5e+00, 1e+04]\n", 570 | " RHS range [0e+00, 0e+00]\n", 571 | "Presolve removed 1 rows and 20 columns\n", 572 | "Presolve time: 0.00s\n", 573 | "Presolve: All rows and columns removed\n", 574 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 575 | " 0 -7.6826528e-01 0.000000e+00 0.000000e+00 0s\n", 576 | "\n", 577 | "Solved in 0 iterations and 0.01 seconds\n", 578 | "Optimal objective -7.682652766e-01\n", 579 | " -> LP optimal, value = -0.768265\n", 580 | "\n", 581 | "deltasol: [-8.71123874e+03 8.79476270e+03 -4.64022019e+00 -4.64022019e+00\n", 582 | " -4.64022019e+00 -4.64022019e+00 -4.64022019e+00 -4.64022019e+00\n", 583 | " -4.64022019e+00 -4.64022019e+00 -4.64022019e+00 -4.64022019e+00\n", 584 | " -4.64022019e+00 -4.64022019e+00 -4.64022019e+00 -4.64022019e+00\n", 585 | " -4.64022019e+00 -4.64022019e+00 -4.64022019e+00 -4.64022019e+00]\n", 586 | "step_size: 0.0057\n", 587 | "x: [8.66158467e+03 1.25536745e+03 4.61377093e+00 4.61377093e+00\n", 588 | " 4.61377093e+00 4.61377093e+00 4.61377093e+00 4.61377093e+00\n", 589 | " 4.61377093e+00 4.61377093e+00 4.61377093e+00 4.61377093e+00\n", 590 | " 4.61377093e+00 4.61377093e+00 4.61377093e+00 4.61377093e+00\n", 591 | " 4.61377093e+00 4.61377093e+00 4.61377093e+00 4.61377093e+00]\n", 592 | "hello, value = 9902.067248228657\n", 593 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 594 | "Coefficient statistics:\n", 595 | " Matrix range [1e+00, 1e+00]\n", 596 | " Objective range [1e+00, 1e+00]\n", 597 | " Bounds range [5e+00, 1e+04]\n", 598 | " RHS range [0e+00, 0e+00]\n", 599 | "Presolve removed 1 rows and 20 columns\n", 600 | "Presolve time: 0.01s\n", 601 | "Presolve: All rows and columns removed\n", 602 | "Iteration Objective Primal Inf. Dual Inf. Time\n" 603 | ] 604 | }, 605 | { 606 | "name": "stdout", 607 | "output_type": "stream", 608 | "text": [ 609 | " 0 -1.1025575e-01 0.000000e+00 0.000000e+00 0s\n", 610 | "\n", 611 | "Solved in 0 iterations and 0.02 seconds\n", 612 | "Optimal objective -1.102557517e-01\n", 613 | " -> LP optimal, value = -0.110256\n", 614 | "\n", 615 | "deltasol: [ 1338.41532548 -1255.36744874 -4.61377093 -4.61377093\n", 616 | " -4.61377093 -4.61377093 -4.61377093 -4.61377093\n", 617 | " -4.61377093 -4.61377093 -4.61377093 -4.61377093\n", 618 | " -4.61377093 -4.61377093 -4.61377093 -4.61377093\n", 619 | " -4.61377093 -4.61377093 -4.61377093 -4.61377093]\n", 620 | "step_size: 0.0351\n", 621 | "x: [8.70856305e+03 1.21130405e+03 4.45182757e+00 4.45182757e+00\n", 622 | " 4.45182757e+00 4.45182757e+00 4.45182757e+00 4.45182757e+00\n", 623 | " 4.45182757e+00 4.45182757e+00 4.45182757e+00 4.45182757e+00\n", 624 | " 4.45182757e+00 4.45182757e+00 4.45182757e+00 4.45182757e+00\n", 625 | " 4.45182757e+00 4.45182757e+00 4.45182757e+00 4.45182757e+00]\n", 626 | "hello, value = 9902.06919246182\n", 627 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 628 | "Coefficient statistics:\n", 629 | " Matrix range [1e+00, 1e+00]\n", 630 | " Objective range [1e+00, 1e+00]\n", 631 | " Bounds range [4e+00, 1e+04]\n", 632 | " RHS range [0e+00, 0e+00]\n", 633 | "Presolve removed 1 rows and 20 columns\n", 634 | "Presolve time: 0.01s\n", 635 | "Presolve: All rows and columns removed\n", 636 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 637 | " 0 -6.9774845e-01 0.000000e+00 0.000000e+00 0s\n", 638 | "\n", 639 | "Solved in 0 iterations and 0.02 seconds\n", 640 | "Optimal objective -6.977484520e-01\n", 641 | " -> LP optimal, value = -0.697748\n", 642 | "\n", 643 | "deltasol: [-8.70856305e+03 8.78869595e+03 -4.45182757e+00 -4.45182757e+00\n", 644 | " -4.45182757e+00 -4.45182757e+00 -4.45182757e+00 -4.45182757e+00\n", 645 | " -4.45182757e+00 -4.45182757e+00 -4.45182757e+00 -4.45182757e+00\n", 646 | " -4.45182757e+00 -4.45182757e+00 -4.45182757e+00 -4.45182757e+00\n", 647 | " -4.45182757e+00 -4.45182757e+00 -4.45182757e+00 -4.45182757e+00]\n", 648 | "step_size: 0.005200000000000001\n", 649 | "x: [8.66327852e+03 1.25700527e+03 4.42867807e+00 4.42867807e+00\n", 650 | " 4.42867807e+00 4.42867807e+00 4.42867807e+00 4.42867807e+00\n", 651 | " 4.42867807e+00 4.42867807e+00 4.42867807e+00 4.42867807e+00\n", 652 | " 4.42867807e+00 4.42867807e+00 4.42867807e+00 4.42867807e+00\n", 653 | " 4.42867807e+00 4.42867807e+00 4.42867807e+00 4.42867807e+00]\n", 654 | "hello, value = 9902.070988686899\n", 655 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 656 | "Coefficient statistics:\n", 657 | " Matrix range [1e+00, 1e+00]\n", 658 | " Objective range [1e+00, 1e+00]\n", 659 | " Bounds range [4e+00, 1e+04]\n", 660 | " RHS range [0e+00, 0e+00]\n", 661 | "Presolve removed 1 rows and 20 columns\n", 662 | "Presolve time: 0.01s\n", 663 | "Presolve: All rows and columns removed\n", 664 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 665 | " 0 -1.0080915e-01 0.000000e+00 0.000000e+00 0s\n", 666 | "\n", 667 | "Solved in 0 iterations and 0.01 seconds\n", 668 | "Optimal objective -1.008091537e-01\n", 669 | " -> LP optimal, value = -0.100809\n", 670 | "\n", 671 | "deltasol: [ 1336.72147543 -1257.00527022 -4.42867807 -4.42867807\n", 672 | " -4.42867807 -4.42867807 -4.42867807 -4.42867807\n", 673 | " -4.42867807 -4.42867807 -4.42867807 -4.42867807\n", 674 | " -4.42867807 -4.42867807 -4.42867807 -4.42867807\n", 675 | " -4.42867807 -4.42867807 -4.42867807 -4.42867807]\n", 676 | "step_size: 0.0322\n", 677 | "x: [8.70632096e+03 1.21652970e+03 4.28607463e+00 4.28607463e+00\n", 678 | " 4.28607463e+00 4.28607463e+00 4.28607463e+00 4.28607463e+00\n", 679 | " 4.28607463e+00 4.28607463e+00 4.28607463e+00 4.28607463e+00\n", 680 | " 4.28607463e+00 4.28607463e+00 4.28607463e+00 4.28607463e+00\n", 681 | " 4.28607463e+00 4.28607463e+00 4.28607463e+00 4.28607463e+00]\n", 682 | "hello, value = 9902.072619263357\n", 683 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 684 | "Coefficient statistics:\n", 685 | " Matrix range [1e+00, 1e+00]\n", 686 | " Objective range [1e+00, 1e+00]\n", 687 | " Bounds range [4e+00, 1e+04]\n", 688 | " RHS range [0e+00, 0e+00]\n", 689 | "Presolve removed 1 rows and 20 columns\n", 690 | "Presolve time: 0.07s\n", 691 | "Presolve: All rows and columns removed\n", 692 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 693 | " 0 -6.3779567e-01 0.000000e+00 0.000000e+00 0s\n", 694 | "\n", 695 | "Solved in 0 iterations and 0.13 seconds\n", 696 | "Optimal objective -6.377956712e-01\n", 697 | " -> LP optimal, value = -0.637796\n", 698 | "\n", 699 | "deltasol: [-8.70632096e+03 8.78347030e+03 -4.28607463e+00 -4.28607463e+00\n", 700 | " -4.28607463e+00 -4.28607463e+00 -4.28607463e+00 -4.28607463e+00\n", 701 | " -4.28607463e+00 -4.28607463e+00 -4.28607463e+00 -4.28607463e+00\n", 702 | " -4.28607463e+00 -4.28607463e+00 -4.28607463e+00 -4.28607463e+00\n", 703 | " -4.28607463e+00 -4.28607463e+00 -4.28607463e+00 -4.28607463e+00]\n", 704 | "step_size: 0.0047\n", 705 | "x: [8.66540125e+03 1.25781201e+03 4.26593008e+00 4.26593008e+00\n", 706 | " 4.26593008e+00 4.26593008e+00 4.26593008e+00 4.26593008e+00\n", 707 | " 4.26593008e+00 4.26593008e+00 4.26593008e+00 4.26593008e+00\n", 708 | " 4.26593008e+00 4.26593008e+00 4.26593008e+00 4.26593008e+00\n", 709 | " 4.26593008e+00 4.26593008e+00 4.26593008e+00 4.26593008e+00]\n", 710 | "hello, value = 9902.074122577114\n", 711 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 712 | "Coefficient statistics:\n", 713 | " Matrix range [1e+00, 1e+00]\n", 714 | " Objective range [1e+00, 1e+00]\n", 715 | " Bounds range [4e+00, 1e+04]\n", 716 | " RHS range [0e+00, 0e+00]\n", 717 | "Presolve removed 1 rows and 20 columns\n", 718 | "Presolve time: 0.01s\n", 719 | "Presolve: All rows and columns removed\n", 720 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 721 | " 0 -9.1291402e-02 0.000000e+00 0.000000e+00 0s\n", 722 | "\n", 723 | "Solved in 0 iterations and 0.01 seconds\n", 724 | "Optimal objective -9.129140203e-02\n", 725 | " -> LP optimal, value = -0.0912914\n", 726 | "\n", 727 | "deltasol: [ 1334.59875241 -1257.81201093 -4.26593008 -4.26593008\n", 728 | " -4.26593008 -4.26593008 -4.26593008 -4.26593008\n", 729 | " -4.26593008 -4.26593008 -4.26593008 -4.26593008\n", 730 | " -4.26593008 -4.26593008 -4.26593008 -4.26593008\n", 731 | " -4.26593008 -4.26593008 -4.26593008 -4.26593008]\n", 732 | "step_size: 0.029300000000000003\n", 733 | "x: [8.70450499e+03 1.22095812e+03 4.14093833e+00 4.14093833e+00\n", 734 | " 4.14093833e+00 4.14093833e+00 4.14093833e+00 4.14093833e+00\n", 735 | " 4.14093833e+00 4.14093833e+00 4.14093833e+00 4.14093833e+00\n", 736 | " 4.14093833e+00 4.14093833e+00 4.14093833e+00 4.14093833e+00\n", 737 | " 4.14093833e+00 4.14093833e+00 4.14093833e+00 4.14093833e+00]\n", 738 | "hello, value = 9902.075464504596\n", 739 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 740 | "Coefficient statistics:\n", 741 | " Matrix range [1e+00, 1e+00]\n", 742 | " Objective range [1e+00, 1e+00]\n", 743 | " Bounds range [4e+00, 1e+04]\n", 744 | " RHS range [0e+00, 0e+00]\n", 745 | "Presolve removed 1 rows and 20 columns\n", 746 | "Presolve time: 0.02s\n", 747 | "Presolve: All rows and columns removed\n", 748 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 749 | " 0 -5.8785588e-01 0.000000e+00 0.000000e+00 0s\n", 750 | "\n", 751 | "Solved in 0 iterations and 0.03 seconds\n", 752 | "Optimal objective -5.878558810e-01\n", 753 | " -> LP optimal, value = -0.587856\n", 754 | "\n", 755 | "deltasol: [-8.70450499e+03 8.77904188e+03 -4.14093833e+00 -4.14093833e+00\n", 756 | " -4.14093833e+00 -4.14093833e+00 -4.14093833e+00 -4.14093833e+00\n", 757 | " -4.14093833e+00 -4.14093833e+00 -4.14093833e+00 -4.14093833e+00\n", 758 | " -4.14093833e+00 -4.14093833e+00 -4.14093833e+00 -4.14093833e+00\n", 759 | " -4.14093833e+00 -4.14093833e+00 -4.14093833e+00 -4.14093833e+00]\n", 760 | "step_size: 0.0044\n", 761 | "x: [8.66620517e+03 1.25958590e+03 4.12271820e+00 4.12271820e+00\n", 762 | " 4.12271820e+00 4.12271820e+00 4.12271820e+00 4.12271820e+00\n", 763 | " 4.12271820e+00 4.12271820e+00 4.12271820e+00 4.12271820e+00\n", 764 | " 4.12271820e+00 4.12271820e+00 4.12271820e+00 4.12271820e+00\n", 765 | " 4.12271820e+00 4.12271820e+00 4.12271820e+00 4.12271820e+00]\n", 766 | "hello, value = 9902.076743345631\n", 767 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 768 | "Coefficient statistics:\n", 769 | " Matrix range [1e+00, 1e+00]\n", 770 | " Objective range [1e+00, 1e+00]\n", 771 | " Bounds range [4e+00, 1e+04]\n", 772 | " RHS range [0e+00, 0e+00]\n", 773 | "Presolve removed 1 rows and 20 columns\n", 774 | "Presolve time: 0.01s\n", 775 | "Presolve: All rows and columns removed\n", 776 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 777 | " 0 -8.5545132e-02 0.000000e+00 0.000000e+00 0s\n", 778 | "\n", 779 | "Solved in 0 iterations and 0.01 seconds\n", 780 | "Optimal objective -8.554513211e-02\n", 781 | " -> LP optimal, value = -0.0855451\n", 782 | "\n", 783 | "deltasol: [ 1333.79483093 -1259.58590328 -4.1227182 -4.1227182\n", 784 | " -4.1227182 -4.1227182 -4.1227182 -4.1227182\n", 785 | " -4.1227182 -4.1227182 -4.1227182 -4.1227182\n", 786 | " -4.1227182 -4.1227182 -4.1227182 -4.1227182\n", 787 | " -4.1227182 -4.1227182 -4.1227182 -4.1227182 ]\n", 788 | "step_size: 0.0275\n", 789 | "x: [8.70288453e+03 1.22494729e+03 4.00934345e+00 4.00934345e+00\n", 790 | " 4.00934345e+00 4.00934345e+00 4.00934345e+00 4.00934345e+00\n", 791 | " 4.00934345e+00 4.00934345e+00 4.00934345e+00 4.00934345e+00\n", 792 | " 4.00934345e+00 4.00934345e+00 4.00934345e+00 4.00934345e+00\n", 793 | " 4.00934345e+00 4.00934345e+00 4.00934345e+00 4.00934345e+00]\n", 794 | "hello, value = 9902.077923801739\n", 795 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n" 796 | ] 797 | }, 798 | { 799 | "name": "stdout", 800 | "output_type": "stream", 801 | "text": [ 802 | "Coefficient statistics:\n", 803 | " Matrix range [1e+00, 1e+00]\n", 804 | " Objective range [1e+00, 1e+00]\n", 805 | " Bounds range [4e+00, 1e+04]\n", 806 | " RHS range [0e+00, 0e+00]\n", 807 | "Presolve removed 1 rows and 20 columns\n", 808 | "Presolve time: 0.01s\n", 809 | "Presolve: All rows and columns removed\n", 810 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 811 | " 0 -5.4318483e-01 0.000000e+00 0.000000e+00 0s\n", 812 | "\n", 813 | "Solved in 0 iterations and 0.01 seconds\n", 814 | "Optimal objective -5.431848296e-01\n", 815 | " -> LP optimal, value = -0.543185\n", 816 | "\n", 817 | "deltasol: [-8.70288453e+03 8.77505271e+03 -4.00934345e+00 -4.00934345e+00\n", 818 | " -4.00934345e+00 -4.00934345e+00 -4.00934345e+00 -4.00934345e+00\n", 819 | " -4.00934345e+00 -4.00934345e+00 -4.00934345e+00 -4.00934345e+00\n", 820 | " -4.00934345e+00 -4.00934345e+00 -4.00934345e+00 -4.00934345e+00\n", 821 | " -4.00934345e+00 -4.00934345e+00 -4.00934345e+00 -4.00934345e+00]\n", 822 | "step_size: 0.004\n", 823 | "x: [8.66807299e+03 1.26004750e+03 3.99330608e+00 3.99330608e+00\n", 824 | " 3.99330608e+00 3.99330608e+00 3.99330608e+00 3.99330608e+00\n", 825 | " 3.99330608e+00 3.99330608e+00 3.99330608e+00 3.99330608e+00\n", 826 | " 3.99330608e+00 3.99330608e+00 3.99330608e+00 3.99330608e+00\n", 827 | " 3.99330608e+00 3.99330608e+00 3.99330608e+00 3.99330608e+00]\n", 828 | "hello, value = 9902.079017006146\n", 829 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 830 | "Coefficient statistics:\n", 831 | " Matrix range [1e+00, 1e+00]\n", 832 | " Objective range [1e+00, 1e+00]\n", 833 | " Bounds range [4e+00, 1e+04]\n", 834 | " RHS range [0e+00, 0e+00]\n", 835 | "Presolve removed 1 rows and 20 columns\n", 836 | "Presolve time: 0.01s\n", 837 | "Presolve: All rows and columns removed\n", 838 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 839 | " 0 -7.7892777e-02 0.000000e+00 0.000000e+00 0s\n", 840 | "\n", 841 | "Solved in 0 iterations and 0.01 seconds\n", 842 | "Optimal objective -7.789277654e-02\n", 843 | " -> LP optimal, value = -0.0778928\n", 844 | "\n", 845 | "deltasol: [ 1331.92701118 -1260.04750178 -3.99330608 -3.99330608\n", 846 | " -3.99330608 -3.99330608 -3.99330608 -3.99330608\n", 847 | " -3.99330608 -3.99330608 -3.99330608 -3.99330608\n", 848 | " -3.99330608 -3.99330608 -3.99330608 -3.99330608\n", 849 | " -3.99330608 -3.99330608 -3.99330608 -3.99330608]\n", 850 | "step_size: 0.0251\n", 851 | "x: [8.70150436e+03 1.22842031e+03 3.89307410e+00 3.89307410e+00\n", 852 | " 3.89307410e+00 3.89307410e+00 3.89307410e+00 3.89307410e+00\n", 853 | " 3.89307410e+00 3.89307410e+00 3.89307410e+00 3.89307410e+00\n", 854 | " 3.89307410e+00 3.89307410e+00 3.89307410e+00 3.89307410e+00\n", 855 | " 3.89307410e+00 3.89307410e+00 3.89307410e+00 3.89307410e+00]\n", 856 | "hello, value = 9902.079998601354\n", 857 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 858 | "Coefficient statistics:\n", 859 | " Matrix range [1e+00, 1e+00]\n", 860 | " Objective range [1e+00, 1e+00]\n", 861 | " Bounds range [4e+00, 1e+04]\n", 862 | " RHS range [0e+00, 0e+00]\n", 863 | "Presolve removed 1 rows and 20 columns\n", 864 | "Presolve time: 0.01s\n", 865 | "Presolve: All rows and columns removed\n", 866 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 867 | " 0 -5.0468073e-01 0.000000e+00 0.000000e+00 0s\n", 868 | "\n", 869 | "Solved in 0 iterations and 0.01 seconds\n", 870 | "Optimal objective -5.046807291e-01\n", 871 | " -> LP optimal, value = -0.504681\n", 872 | "\n", 873 | "deltasol: [-8.70150436e+03 8.77157969e+03 -3.89307410e+00 -3.89307410e+00\n", 874 | " -3.89307410e+00 -3.89307410e+00 -3.89307410e+00 -3.89307410e+00\n", 875 | " -3.89307410e+00 -3.89307410e+00 -3.89307410e+00 -3.89307410e+00\n", 876 | " -3.89307410e+00 -3.89307410e+00 -3.89307410e+00 -3.89307410e+00\n", 877 | " -3.89307410e+00 -3.89307410e+00 -3.89307410e+00 -3.89307410e+00]\n", 878 | "step_size: 0.0038\n", 879 | "x: [8.66843864e+03 1.26175231e+03 3.87828041e+00 3.87828041e+00\n", 880 | " 3.87828041e+00 3.87828041e+00 3.87828041e+00 3.87828041e+00\n", 881 | " 3.87828041e+00 3.87828041e+00 3.87828041e+00 3.87828041e+00\n", 882 | " 3.87828041e+00 3.87828041e+00 3.87828041e+00 3.87828041e+00\n", 883 | " 3.87828041e+00 3.87828041e+00 3.87828041e+00 3.87828041e+00]\n", 884 | "hello, value = 9902.080943260406\n", 885 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 886 | "Coefficient statistics:\n", 887 | " Matrix range [1e+00, 1e+00]\n", 888 | " Objective range [1e+00, 1e+00]\n", 889 | " Bounds range [4e+00, 1e+04]\n", 890 | " RHS range [0e+00, 0e+00]\n", 891 | "Presolve removed 1 rows and 20 columns\n", 892 | "Presolve time: 0.09s\n", 893 | "Presolve: All rows and columns removed\n", 894 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 895 | " 0 -7.4183006e-02 0.000000e+00 0.000000e+00 0s\n", 896 | "\n", 897 | "Solved in 0 iterations and 0.13 seconds\n", 898 | "Optimal objective -7.418300644e-02\n", 899 | " -> LP optimal, value = -0.074183\n", 900 | "\n", 901 | "deltasol: [ 1331.56135976 -1261.75231231 -3.87828041 -3.87828041\n", 902 | " -3.87828041 -3.87828041 -3.87828041 -3.87828041\n", 903 | " -3.87828041 -3.87828041 -3.87828041 -3.87828041\n", 904 | " -3.87828041 -3.87828041 -3.87828041 -3.87828041\n", 905 | " -3.87828041 -3.87828041 -3.87828041 -3.87828041]\n", 906 | "step_size: 0.024\n", 907 | "x: [8.70039611e+03 1.23147026e+03 3.78520168e+00 3.78520168e+00\n", 908 | " 3.78520168e+00 3.78520168e+00 3.78520168e+00 3.78520168e+00\n", 909 | " 3.78520168e+00 3.78520168e+00 3.78520168e+00 3.78520168e+00\n", 910 | " 3.78520168e+00 3.78520168e+00 3.78520168e+00 3.78520168e+00\n", 911 | " 3.78520168e+00 3.78520168e+00 3.78520168e+00 3.78520168e+00]\n", 912 | "hello, value = 9902.081834543995\n", 913 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 914 | "Coefficient statistics:\n", 915 | " Matrix range [1e+00, 1e+00]\n", 916 | " Objective range [1e+00, 1e+00]\n", 917 | " Bounds range [4e+00, 1e+04]\n", 918 | " RHS range [0e+00, 0e+00]\n", 919 | "Presolve removed 1 rows and 20 columns\n", 920 | "Presolve time: 0.01s\n", 921 | "Presolve: All rows and columns removed\n", 922 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 923 | " 0 -4.7177057e-01 0.000000e+00 0.000000e+00 0s\n", 924 | "\n", 925 | "Solved in 0 iterations and 0.01 seconds\n", 926 | "Optimal objective -4.717705682e-01\n", 927 | " -> LP optimal, value = -0.471771\n", 928 | "\n", 929 | "deltasol: [-8.70039611e+03 8.76852974e+03 -3.78520168e+00 -3.78520168e+00\n", 930 | " -3.78520168e+00 -3.78520168e+00 -3.78520168e+00 -3.78520168e+00\n", 931 | " -3.78520168e+00 -3.78520168e+00 -3.78520168e+00 -3.78520168e+00\n", 932 | " -3.78520168e+00 -3.78520168e+00 -3.78520168e+00 -3.78520168e+00\n", 933 | " -3.78520168e+00 -3.78520168e+00 -3.78520168e+00 -3.78520168e+00]\n", 934 | "step_size: 0.0035\n", 935 | "x: [8.66994473e+03 1.26216011e+03 3.77195348e+00 3.77195348e+00\n", 936 | " 3.77195348e+00 3.77195348e+00 3.77195348e+00 3.77195348e+00\n", 937 | " 3.77195348e+00 3.77195348e+00 3.77195348e+00 3.77195348e+00\n", 938 | " 3.77195348e+00 3.77195348e+00 3.77195348e+00 3.77195348e+00\n", 939 | " 3.77195348e+00 3.77195348e+00 3.77195348e+00 3.77195348e+00]\n", 940 | "hello, value = 9902.082660874696\n", 941 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 942 | "Coefficient statistics:\n", 943 | " Matrix range [1e+00, 1e+00]\n", 944 | " Objective range [1e+00, 1e+00]\n", 945 | " Bounds range [4e+00, 1e+04]\n", 946 | " RHS range [0e+00, 0e+00]\n", 947 | "Presolve removed 1 rows and 20 columns\n", 948 | "Presolve time: 0.04s\n", 949 | "Presolve: All rows and columns removed\n", 950 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 951 | " 0 -6.8185384e-02 0.000000e+00 0.000000e+00 0s\n", 952 | "\n", 953 | "Solved in 0 iterations and 0.07 seconds\n", 954 | "Optimal objective -6.818538383e-02\n", 955 | " -> LP optimal, value = -0.0681854\n", 956 | "\n", 957 | "deltasol: [ 1330.05527352 -1262.16011091 -3.77195348 -3.77195348\n", 958 | " -3.77195348 -3.77195348 -3.77195348 -3.77195348\n", 959 | " -3.77195348 -3.77195348 -3.77195348 -3.77195348\n", 960 | " -3.77195348 -3.77195348 -3.77195348 -3.77195348\n", 961 | " -3.77195348 -3.77195348 -3.77195348 -3.77195348]\n", 962 | "step_size: 0.0221\n", 963 | "x: [8.69933895e+03 1.23426637e+03 3.68859331e+00 3.68859331e+00\n", 964 | " 3.68859331e+00 3.68859331e+00 3.68859331e+00 3.68859331e+00\n", 965 | " 3.68859331e+00 3.68859331e+00 3.68859331e+00 3.68859331e+00\n", 966 | " 3.68859331e+00 3.68859331e+00 3.68859331e+00 3.68859331e+00\n", 967 | " 3.68859331e+00 3.68859331e+00 3.68859331e+00 3.68859331e+00]\n", 968 | "hello, value = 9902.083415634337\n", 969 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 970 | "Coefficient statistics:\n", 971 | " Matrix range [1e+00, 1e+00]\n", 972 | " Objective range [1e+00, 1e+00]\n", 973 | " Bounds range [4e+00, 1e+04]\n", 974 | " RHS range [0e+00, 0e+00]\n", 975 | "Presolve removed 1 rows and 20 columns\n", 976 | "Presolve time: 0.01s\n", 977 | "Presolve: All rows and columns removed\n", 978 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 979 | " 0 -4.4139942e-01 0.000000e+00 0.000000e+00 0s\n", 980 | "\n", 981 | "Solved in 0 iterations and 0.01 seconds\n", 982 | "Optimal objective -4.413994193e-01\n", 983 | " -> LP optimal, value = -0.441399\n", 984 | "\n", 985 | "deltasol: [-8.69933895e+03 8.76573363e+03 -3.68859331e+00 -3.68859331e+00\n", 986 | " -3.68859331e+00 -3.68859331e+00 -3.68859331e+00 -3.68859331e+00\n", 987 | " -3.68859331e+00 -3.68859331e+00 -3.68859331e+00 -3.68859331e+00\n", 988 | " -3.68859331e+00 -3.68859331e+00 -3.68859331e+00 -3.68859331e+00\n", 989 | " -3.68859331e+00 -3.68859331e+00 -3.68859331e+00 -3.68859331e+00]\n" 990 | ] 991 | }, 992 | { 993 | "name": "stdout", 994 | "output_type": "stream", 995 | "text": [ 996 | "step_size: 0.0033\n", 997 | "x: [8.67063113e+03 1.26319329e+03 3.67642095e+00 3.67642095e+00\n", 998 | " 3.67642095e+00 3.67642095e+00 3.67642095e+00 3.67642095e+00\n", 999 | " 3.67642095e+00 3.67642095e+00 3.67642095e+00 3.67642095e+00\n", 1000 | " 3.67642095e+00 3.67642095e+00 3.67642095e+00 3.67642095e+00\n", 1001 | " 3.67642095e+00 3.67642095e+00 3.67642095e+00 3.67642095e+00]\n", 1002 | "hello, value = 9902.084139604198\n", 1003 | "Optimize a model with 1 rows, 20 columns and 20 nonzeros\n", 1004 | "Coefficient statistics:\n", 1005 | " Matrix range [1e+00, 1e+00]\n", 1006 | " Objective range [1e+00, 1e+00]\n", 1007 | " Bounds range [4e+00, 1e+04]\n", 1008 | " RHS range [0e+00, 0e+00]\n", 1009 | "Presolve removed 1 rows and 20 columns\n", 1010 | "Presolve time: 0.02s\n", 1011 | "Presolve: All rows and columns removed\n", 1012 | "Iteration Objective Primal Inf. Dual Inf. Time\n", 1013 | " 0 -6.4412997e-02 0.000000e+00 0.000000e+00 0s\n", 1014 | "\n", 1015 | "Solved in 0 iterations and 0.03 seconds\n", 1016 | "Optimal objective -6.441299741e-02\n", 1017 | " -> LP optimal, value = -0.064413\n", 1018 | "\n", 1019 | "deltasol: [ 1329.3688705 -1263.19329343 -3.67642095 -3.67642095\n", 1020 | " -3.67642095 -3.67642095 -3.67642095 -3.67642095\n", 1021 | " -3.67642095 -3.67642095 -3.67642095 -3.67642095\n", 1022 | " -3.67642095 -3.67642095 -3.67642095 -3.67642095\n", 1023 | " -3.67642095 -3.67642095 -3.67642095 -3.67642095]\n" 1024 | ] 1025 | } 1026 | ], 1027 | "source": [ 1028 | "alpha = 0.0001\n", 1029 | "pi = 0.5\n", 1030 | "T = 20\n", 1031 | "N = 10000\n", 1032 | "\n", 1033 | "def impact(x,alpha,pi):\n", 1034 | " return 1-alpha*x**pi\n", 1035 | "\n", 1036 | "def deri_impact(x,alpha,pi):\n", 1037 | " return -alpha*pi*x**(pi-1)\n", 1038 | "\n", 1039 | "def gradcomp(n, gradient,x,alpha,pi):\n", 1040 | " #part1 \n", 1041 | " impact_series = np.cumprod(impact(x,alpha,pi))\n", 1042 | " part1 = impact_series\n", 1043 | "\n", 1044 | " #part2\n", 1045 | " #the rest multiplied terms\n", 1046 | " intermediate_term1 = (impact_series*x)[::-1]\n", 1047 | " term1 = np.cumsum(intermediate_term1)[::-1]/impact(x,alpha,pi)\n", 1048 | " #derivative of impact functions\n", 1049 | " term2 = deri_impact(x,alpha,pi)\n", 1050 | " part2 = np.nan_to_num(term1) * np.nan_to_num(term2)\n", 1051 | " gradient = part1 + part2\n", 1052 | " return gradient\n", 1053 | "\n", 1054 | "def myfunction(x):\n", 1055 | " return (np.dot(impact(x,alpha,pi).cumprod(),x))\n", 1056 | "\n", 1057 | "def line_search(x ,y):\n", 1058 | " index = np.linspace(0,1,10000)\n", 1059 | " change = (index[:,np.newaxis] * y)\n", 1060 | " x_matrix = np.tile(x, (10000,1))\n", 1061 | " sum_change = pd.DataFrame(x_matrix + change)\n", 1062 | " best_size = sum_change.apply(myfunction, axis=1).argmax()\n", 1063 | " return 1/10000 * best_size\n", 1064 | "\n", 1065 | "def loop(n,xsol,row1):\n", 1066 | " x = np.zeros(n)\n", 1067 | " gradient = numpy.zeros(n)\n", 1068 | " slacks = 0\n", 1069 | " for j in range(n):\n", 1070 | " x[j] = xsol[j]\n", 1071 | "\n", 1072 | " maxits = 100\n", 1073 | " for itcount in range(maxits):\n", 1074 | " val = myfunction(x)\n", 1075 | " gradient = gradcomp(n, gradient,x,alpha,pi)\n", 1076 | " print (\"hello, value = \", val)\n", 1077 | " compute_slacks(n, row1, x, slacks)\n", 1078 | " y = steplp(n, row1, x, slacks, gradient)\n", 1079 | " step_size = line_search(x,y)\n", 1080 | " print('step_size:', step_size)\n", 1081 | " \n", 1082 | " val_1 = myfunction(x) #stopping condition\n", 1083 | " x = x + step_size * y\n", 1084 | " val_2 = myfunction(x)\n", 1085 | " if val_2 - val_1 < 0.000000001:\n", 1086 | " print('optimal achieved at ', val)\n", 1087 | " print('optimal selling: ', x)\n", 1088 | " return \n", 1089 | " print ('x: ', x)\n", 1090 | "\n", 1091 | "def compute_slacks(n, row1, x, slacks):\n", 1092 | " slacks = N - np.sum(x)\n", 1093 | "\n", 1094 | " \n", 1095 | "def steplp(n, row1, x, slacks, gradient):\n", 1096 | " m = Model(\"feasible\")\n", 1097 | " m.ModelSense = 1 #minimize\n", 1098 | " #create variables and put into a dictionary\n", 1099 | " deltavar = {}\n", 1100 | " for j in range(n):\n", 1101 | " deltavar[j] = m.addVar(lb = -x[j], ub = N-x[j], obj = -gradient[j], vtype = GRB.CONTINUOUS, name = \"delta_\"+str(j+1))\n", 1102 | "\n", 1103 | " # Update model to integrate new variables\n", 1104 | " m.update() \n", 1105 | " #add first constraint\n", 1106 | " xpr = LinExpr()\n", 1107 | " for j in range(n):\n", 1108 | " xpr += row1[j]*deltavar[j]\n", 1109 | " m.addConstr(xpr == slacks, name=\"const1\") \n", 1110 | " \n", 1111 | " m.write(\"step.lp\")\n", 1112 | " m.optimize()\n", 1113 | "\n", 1114 | " code = \"optimal\"\n", 1115 | "\n", 1116 | " if m.status == GRB.status.INF_OR_UNBD:\n", 1117 | " print('->LP infeasible or unbounded\\n')\n", 1118 | " code = \"inf_or_unbd\"\n", 1119 | " if m.status == GRB.status.UNBOUNDED:\n", 1120 | " print('->LP unbounded\\n')\n", 1121 | " code = \"unbd\"\n", 1122 | " if m.status == GRB.status.INFEASIBLE:\n", 1123 | " print('->LP infeasible\\n')\n", 1124 | " code = \"infeas\"\n", 1125 | "\n", 1126 | "\n", 1127 | " print(\" -> LP optimal, value = %g\\n\" %(m.objval))\n", 1128 | "\n", 1129 | " deltasol = numpy.zeros(n)\n", 1130 | " for j in range(n):\n", 1131 | " #print (\"%s = %g\" %(deltavar[j].varname, deltavar[j].x))\n", 1132 | " deltasol[j] = deltavar[j].x\n", 1133 | "\n", 1134 | " print ('deltasol:', deltasol)\n", 1135 | "\n", 1136 | " return deltasol\n", 1137 | "\n", 1138 | "def run():\n", 1139 | " n = T\n", 1140 | " row1 = numpy.repeat(1,n)\n", 1141 | " feasible = np.repeat(N/T, T)\n", 1142 | " #feasible = np.zeros(T)\n", 1143 | " #feasible[0] = N\n", 1144 | " code, xsol = 'feasible', feasible\n", 1145 | "\n", 1146 | " print (\"initial feasible solution = \")\n", 1147 | " print(xsol)\n", 1148 | "\n", 1149 | " loop(n,xsol,row1)\n", 1150 | "\n", 1151 | "if __name__ == '__main__':\n", 1152 | " run()\n", 1153 | "\n", 1154 | "\n" 1155 | ] 1156 | }, 1157 | { 1158 | "cell_type": "code", 1159 | "execution_count": null, 1160 | "metadata": {}, 1161 | "outputs": [], 1162 | "source": [] 1163 | } 1164 | ], 1165 | "metadata": { 1166 | "kernelspec": { 1167 | "display_name": "Python 3", 1168 | "language": "python", 1169 | "name": "python3" 1170 | }, 1171 | "language_info": { 1172 | "codemirror_mode": { 1173 | "name": "ipython", 1174 | "version": 3 1175 | }, 1176 | "file_extension": ".py", 1177 | "mimetype": "text/x-python", 1178 | "name": "python", 1179 | "nbconvert_exporter": "python", 1180 | "pygments_lexer": "ipython3", 1181 | "version": "3.7.3" 1182 | } 1183 | }, 1184 | "nbformat": 4, 1185 | "nbformat_minor": 2 1186 | } 1187 | -------------------------------------------------------------------------------- /Optimal Trade Execution - Market Impact Model.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yc3566/Optimal-Trade-Execution-Algorithm-Market-Impact-Model/c7f48d79e36f8963199354d7f8b784c058b353ff/Optimal Trade Execution - Market Impact Model.pdf --------------------------------------------------------------------------------