Artelys Knitro Artelys Knitro Home
  • Documentation
  • logo-new-blancArtelys
Python / Knitro API Python / Pyomo Julia / JuMP

On this page

  • Introduction
  • Investment characteristics
  • Problem description
  • Mixed-integer nonlinear model
  • Input data
  • Model implementation
  • Solving for eight machines
  • Solving for every count
  • Conclusion

Pivot Irrigators

Lay out centre-pivot irrigation machines in a field to maximize the net present value of the investment, a circle-packing problem with discrete radii.

Notebook
Python / Knitro API Python / Pyomo Julia / JuMP

Introduction

We consider the problem of designing the layout of center-pivot irrigation machines in a field, which can be modeled as a circle packing problem.

Pivot irrigators are commonly used by crop farmers to supplement natural rainfall. For example, large areas of the mid-west USA are covered with these machines. The machines are almost always arranged in a simple grid pattern, which is not an efficient design in terms of coverage.

We consider the following situation:

  • In a semi-arid region, only irrigated areas are productive.
  • We consider a rectangular field in this region, with sides of 914.400 by 442.570 metres, with a total area of 40.4686 hectares (exactly 100 acres).
  • The water distribution system of the field, composed of pivot irrigators, is worn out, so we need to replace it with the same type of machines.
  • The machines are composed of a pivot mechanism and 20 metre long segments.

To maximize crop yield, it is important that we irrigate as much of the area as possible. However, we need to account for the cost of the machines, along with the operational and maintenance costs over their lifetime.

This example is based on this post.

Here is the grid layout of eight identical machines, and the layout the model finds for the same eight:

Both cover the same field with the same number of machines, and on the numbers below the grid is not merely worse. It loses money. Letting the machines differ in size and sit where they fit turns that loss into a profit.

Investment characteristics

Each machine costs $43,606 to purchase, install and for its maintenance over 15 years (its expected lifetime). A machine consists of the pivot mechanism and a single 20 metre long built-in segment.

Additional 20 metre long segments cost $15,803 each all included. A machine may have up to a total of eight segments (including the built-in segment).

We have fixed operating costs of $2,009,094 for 15 years, covering costs for other machinery and staff associated with working the field.

The planned crop will yield an average gross margin of $10.268 per square metre per year, allowing for all variable costs (planting, harvesting, etc).

A positive Net Present Value (NPV) would indicate that this is a worthwhile investment, while a negative one would indicate that the investment is a loss.

Furthermore, we note that larger machines are more profitable. Specifically, the cost of a machine is a linear function of the number of segments, while the yield from a machine is a function of the coverage area, which increases with the square of the number of segments. Therefore, all else being equal, larger machines are better.

In particular, a machine with only one or two segments makes a loss, while larger machines make a positive contribution to the NPV. Therefore, we only consider machines with at least 3 segments (including the built-in segment).

Problem description

Input

  • \(S_{\text{size}}\) the length of each irrigation machine segment
  • \(S^{\text{min}}\) the minimum number of segments per machine
  • \(S^{\text{max}}\) the maximum number of segments per machine
  • \(W\) the width of the field
  • \(L\) the length of the field
  • \(C_{\text{operating}}\) the operating cost (over 15 years)
  • \(C_{\text{machine}}\) the cost of each irrigation machine (all included)
  • \(C_{\text{segment}}\) the cost of each additional irrigation machine segment (all included)
  • \(Y\) the yield per square metre irrigated

Problem:

Create a layout by choosing:

  • the number of machines
  • the number of segments of each machine
  • the position of each machine’s pivot in the field

such that:

  • the circle covered by each machine is within the field’s boundaries
  • the circles covered by two machines cannot overlap

Objective:

Maximize the overall NPV of our investment.

This is a variant of a circle packing problem, where the radii of the circles are decision variables that must take values in a discrete set.

Mixed-integer nonlinear model

We simplify the model by making the number of machines an exogenous input \(N\). Otherwise, we would need an additional binary variable for each machine to decide whether we use it or not, which would unnecessarily complicate the model. We can instead solve the model iteratively over a reasonable range for the number of machines.

For a given number of machines \(N\), the model needs to decide, for each machine, the number of segments and the position of the machine’s pivot.

Variables

  • \(s_i \in \mathbb{N}\), \(S^{\text{min}} \le s_i \le S^{\text{max}}\), \(i = 1, \dots, N\), the number of segments of machine \(i\) (including the built-in segment)
  • \(x_i \in \mathbb{R}\), \(i = 1, \dots, N\), the \(x\) position of machine \(i\)’s pivot
  • \(y_i \in \mathbb{R}\), \(i = 1, \dots, N\), the \(y\) position of machine \(i\)’s pivot

Objective: maximize the NPV, i.e. the total yield of the irrigated areas minus the cost of the machines, the cost of the additional segments and the operating cost

\[ \max \quad \left( \sum_{i=1}^N \pi \cdot (S_{\text{size}} \cdot s_i)^2 \right) \cdot Y - N \cdot C_{\text{machine}} - \left( \sum_{i=1}^N (s_i - 1) \right) \cdot C_{\text{segment}} - C_{\text{operating}} \]

Note that the cost part of the NPV calculation is linear. But the yield is a function of the area covered by each machine, which depends on the squared number of segments of the machine: the objective is therefore nonlinear (quadratic).

Constraints

  • Irrigation circles are within the field’s boundaries:

\[ \forall i = 1, \dots, N, \qquad S_{\text{size}} \cdot s_i \le x_i \le W - S_{\text{size}} \cdot s_i \]

\[ \forall i = 1, \dots, N, \qquad S_{\text{size}} \cdot s_i \le y_i \le L - S_{\text{size}} \cdot s_i \]

  • Irrigation circles must not overlap, i.e. the distance between two pivots must be at least the sum of the radii of the two irrigation circles:

\[ \forall i, j = 1, \dots, N, \; i<j, \qquad (x_i - x_j)^2 + (y_i - y_j)^2 \ge \left( S_{\text{size}} \cdot (s_i + s_j) \right)^2 \]

These non-overlap constraints are nonconvex quadratic constraints, which makes this problem a nonconvex mixed-integer nonlinear program (MINLP).

Input data

A Field is the field and the money. It holds how big the field is, how long a segment is, how many segments a machine may carry, what a machine and a segment cost, what running the field costs, and what a square metre yields in a year. A Layout is where each machine stands and how many segments it carries, together with the net present value that layout earns.

net_present_value is the objective written out in plain code, so a layout that was never solved for can be priced the same way as one that was.

import math
from dataclasses import dataclass

from plot import draw_comparison, draw_layout, draw_layouts
from report import report_counts, report_layout


@dataclass
class Field:
    width: float
    length: float
    segment_length: float
    min_segments: int
    max_segments: int
    machine_cost: float
    segment_cost: float
    operating_cost: float
    margin: float

    @property
    def area(self):
        return self.width * self.length


@dataclass
class Layout:
    npv: float
    x: list
    y: list
    segments: list

    @property
    def num_machines(self):
        return len(self.segments)


def radius(field, segments):
    return segments * field.segment_length


def covered_area(field, segments):
    return sum(math.pi * radius(field, s) ** 2 for s in segments)


def coverage(field, layout):
    return covered_area(field, layout.segments) / field.area


def net_present_value(field, segments):
    margin = covered_area(field, segments) * field.margin
    machines_cost = len(segments) * field.machine_cost
    segments_cost = sum(s - 1 for s in segments) * field.segment_cost
    return margin - machines_cost - segments_cost - field.operating_cost

The field is 914.400 by 442.570 metres, machines are built from 20 metre segments and carry between 3 and 8 of them, and the costs and yield are the ones listed above, in dollars over the fifteen year lifetime. grid_layout is the arrangement farms actually use, four machines by two, every one the same size and as large as the spacing allows.

field = Field(
    width=914.400,
    length=442.570,
    segment_length=20,
    min_segments=3,
    max_segments=8,
    machine_cost=43606.07950630836,
    segment_cost=15803.03975315418,
    operating_cost=2009094.3111355049,
    margin=10.268207333516287,
)


def grid_layout(field, segments=5):
    reach = radius(field, segments)
    columns = [reach + k * (field.width - 2 * reach) / 3 for k in range(4)]
    rows = [reach, field.length - reach]
    counts = [float(segments)] * (4 * len(rows))
    x = [column for _ in rows for column in columns]
    y = [row for row in rows for _ in columns]
    return Layout(net_present_value(field, counts), x, y, counts)

A layout is the field seen from above, each machine a disc as wide as its reach. The dashed rings inside a disc are its segments, so a bigger machine is both wider and more finely drawn, and the number at the center is how many it carries. Ground no disc covers is ground that earns nothing.

Eight machines on a grid is the arrangement to beat. It leaves the four corners, the gaps between neighbours and a strip right across the middle dry, and on these numbers it does not merely earn less than it could. It loses money.

report_layout(field, grid_layout(field))
8 machines, net present value -$282,958, covering 62.1% of the field

machine  segments    reach          x          y    covered  share
------------------------------------------------------------------
      1         5     100m      100.0      100.0     31,416   7.8%
      2         5     100m      338.1      100.0     31,416   7.8%
      3         5     100m      576.3      100.0     31,416   7.8%
      4         5     100m      814.4      100.0     31,416   7.8%
      5         5     100m      100.0      342.6     31,416   7.8%
      6         5     100m      338.1      342.6     31,416   7.8%
      7         5     100m      576.3      342.6     31,416   7.8%
      8         5     100m      814.4      342.6     31,416   7.8%

Margin $2,580,682 less $348,849 of machines, $505,697 of segments,
$2,009,094 to operate
draw_layout(field, grid_layout(field), "Eight machines on a grid")
Eight machines on a grid5 segments, 100 m reach55 segments, 100 m reach55 segments, 100 m reach55 segments, 100 m reach55 segments, 100 m reach55 segments, 100 m reach55 segments, 100 m reach55 segments, 100 m reach5

Model implementation

import pyomo.environ as pyo

SOLVER_NAME = "knitroampl"

maximize_npv(field, num_machines) builds the model, solves it with Knitro, and returns a Layout. The objective and the non-overlap constraints multiply two variables, and Objective and Constraint take them as written.

Since the problem is a nonconvex MINLP, we enable Knitro’s MIP multistart, which helps find good solutions, and we set a node limit on the branch-and-bound to bound the resolution time.

def maximize_npv(field, num_machines, *, multistart=1, max_nodes=2**14):
    model = pyo.ConcreteModel()

    reach = radius(field, field.min_segments)
    bounds = (field.min_segments, field.max_segments)

    model.Machines = pyo.RangeSet(0, num_machines - 1)

    model.s = pyo.Var(model.Machines, within=pyo.Integers, bounds=bounds)
    model.x = pyo.Var(model.Machines, bounds=(reach, field.width - reach))
    model.y = pyo.Var(model.Machines, bounds=(reach, field.length - reach))

    def objective_rule(model):
        area = sum(math.pi * radius(field, model.s[i]) ** 2 for i in model.Machines)
        margin = field.margin * area
        machines_cost = num_machines * field.machine_cost
        segments_cost = field.segment_cost * sum(model.s[i] - 1 for i in model.Machines)
        return margin - machines_cost - segments_cost - field.operating_cost

    model.obj = pyo.Objective(rule=objective_rule, sense=pyo.maximize)

    def x_lower_rule(model, i):
        return model.x[i] >= model.s[i] * field.segment_length

    model.x_lower = pyo.Constraint(model.Machines, rule=x_lower_rule)

    def x_upper_rule(model, i):
        return model.x[i] <= field.width - model.s[i] * field.segment_length

    model.x_upper = pyo.Constraint(model.Machines, rule=x_upper_rule)

    def y_lower_rule(model, i):
        return model.y[i] >= model.s[i] * field.segment_length

    model.y_lower = pyo.Constraint(model.Machines, rule=y_lower_rule)

    def y_upper_rule(model, i):
        return model.y[i] <= field.length - model.s[i] * field.segment_length

    model.y_upper = pyo.Constraint(model.Machines, rule=y_upper_rule)

    def no_overlap_rule(model, i, j):
        if i >= j:
            return pyo.Constraint.Skip
        dx = model.x[i] - model.x[j]
        dy = model.y[i] - model.y[j]
        radii = (model.s[i] + model.s[j]) * field.segment_length
        return dx**2 + dy**2 >= radii**2

    model.no_overlap = pyo.Constraint(
        model.Machines, model.Machines, rule=no_overlap_rule
    )

    solver = pyo.SolverFactory(SOLVER_NAME)
    solver.options["mip_multistart"] = multistart
    solver.options["mip_maxnodes"] = max_nodes
    solver.solve(model, tee=True)

    npv = model.obj()
    x = [model.x[i]() for i in model.Machines]
    y = [model.y[i]() for i in model.Machines]
    s = [model.s[i]() for i in model.Machines]
    return Layout(npv, x, y, s)

Solving for eight machines

Eight is the number the grid uses, so it is the first thing to ask for, the same field and the same count with the machines free to move and free to differ in size.

layout_8 = maximize_npv(field, 8)
Artelys Knitro 16.0.0: mip_multistart=1
mip_maxnodes=16384

=======================================
          Commercial License
         Artelys Knitro 16.0.0
=======================================

Knitro changing mip_method from AUTO to 1.
No start point provided -- Knitro computing one.

Knitro presolve eliminated 0 variables (0%) and 0 constraints (0%) in 0.00s.

concurrent_evals         0
datacheck                0
feastol                  1e-06
feastol_abs              1e-06
findiff_numthreads       1
hessian_no_f             1
hessopt                  1
mip_maxnodes             16384
mip_multistart           1
opttol                   1e-06
opttol_abs               0.001
Knitro changing mip_root_nlpalg from AUTO to 1.
Knitro changing mip_node_nlpalg from AUTO to 1.
Knitro changing mip_branchrule from AUTO to 2.
Knitro changing mip_selectrule from AUTO to 2.
Knitro changing mip_mir from AUTO to 2.
Knitro changing mip_clique from AUTO to 0.
Knitro changing mip_zerohalf from AUTO to 0.
Knitro changing mip_liftproject from AUTO to 0.
Knitro changing mip_knapsack from AUTO to 2.
Knitro changing mip_gomory from AUTO to 0.
Knitro changing mip_cut_flowcover from AUTO to 2.
Knitro changing mip_cut_probing from AUTO to 1.
Knitro changing mip_rounding from AUTO to 3.
Knitro changing mip_heuristic_strategy from AUTO to 1.
Knitro changing mip_heuristic_feaspump from AUTO to 1.
Knitro changing mip_heuristic_misqp from AUTO to 0.
Knitro changing mip_heuristic_mpec from AUTO to 1.
Knitro changing mip_heuristic_diving from AUTO to 1926.
Knitro changing mip_heuristic_fixpropagate from AUTO to 62.
Knitro changing mip_heuristic_lns from AUTO to 0.
Knitro changing mip_heuristic_localsearch from AUTO to 1.
Knitro changing mip_pseudoinit from AUTO to 1.

Problem Characteristics                     |           Presolved
-----------------------
Problem type: MIQCQP
Objective: maximize / quadratic
Number of variables:                     24 |                            24
  bounds:         lower     upper     range |     lower     upper     range
                      0         0        24 |         0         0        24
                             free     fixed |                free     fixed
                                0         0 |                   0         0
                  cont.    binary   integer |     cont.    binary   integer
                     16         0         8 |        16         0         8
Number of constraints:                   60 |                            60
                    eq.     ineq.     range |       eq.     ineq.     range
  linear:             0        32         0 |         0        32         0
  quadratic:          0        28         0 |         0        28         0
Number of nonzeros:
              objective  Jacobian   Hessian | objective  Jacobian   Hessian
  linear:             8        64           |         8        64          
  quadratic:          8       168       108 |         8       168       108
  total:              8       232       108 |         8       232       108

Knitro using Branch and Bound method with 8 threads.

Initial points
--------------
No initial point provided for the root node relaxation.
No primal point provided for the MIP.

Coefficient range:
  linear objective:          [2e+04, 2e+04] |                [3e+01, 3e+01]
  linear constraints:        [1e+00, 2e+01] |                [1e+00, 2e+01]
  quadratic objective:       [1e+04, 1e+04] |                [2e+01, 2e+01]
  quadratic constraints:     [1e+00, 8e+02] |                [2e-02, 2e+01]
  variable bounds:           [3e+00, 9e+02] |                [3e+00, 9e+02]
  constraint bounds:         [4e+02, 9e+02] |                [4e+02, 9e+02]

Root node relaxation
--------------------

 Iter      Objective      Feasibility        Optimality       Time 
                             error              error        (secs)
 ----      ---------      -----------        ----------      ------
    0   -1.68170e+06          14400.9          0.211068       0.019
    1   -2.16662e+06          4168.94          0.883468       0.019
    2   -2.26549e+06          1092.99           2.17355       0.020
    3   -2.26807e+06          339.753           2.54056       0.020
    4   -2.26491e+06          260.932           2.65815       0.020
    5   -2.26283e+06          218.536           2.70606       0.021
    6   -2.26142e+06          192.766           2.73660       0.021
    7   -2.26055e+06          169.998           2.75323       0.021
    8   -2.26013e+06          152.644           2.76265       0.022
    9   -2.25975e+06          137.853           2.77337       0.022
   10   -2.25951e+06          123.626           2.78079       0.022
   11   -2.26022e+06          128.740           2.76929       0.023
   12   -2.26036e+06          110.239           2.76954       0.023
   13   -2.26062e+06          100.133           2.76746       0.023
   14   -2.26147e+06          97.2033           2.75282       0.024
   15   -2.26227e+06          86.6805           2.73710       0.024
   16   -2.26340e+06          82.5117           2.71494       0.025
   17   -2.26488e+06          68.6615           2.68155       0.025
   18   -2.26605e+06          64.0655           2.65265       0.025
   19   -2.26688e+06          55.3387           2.62733       0.026
   20   -2.26779e+06          45.5852           2.59725       0.026
   30   -2.23557e+06          9.53453           4.36023       0.029
   40   -1.65424e+06          232.595           4.82700       0.032
   50   -1.11012e+06          152.262           9.92205       0.035
   60       -747654.      0.00000e+00           18.6515       0.037
   70       -366752.      0.00000e+00           32.0751       0.039
   80       -47698.0      0.00000e+00           1.38662       0.041
   90        194786.      0.00000e+00           11.4787       0.044
  100        224245.      0.00000e+00       2.09363e-03       0.045

Tree search
-----------

       Nodes        Best solution   Best bound      Gap       Time 
   Expl  |  Unexpl      value         value                  (secs)
   ---------------  -------------   ----------      ---      ------
      1       2     -47797.2 FCRD          inf                0.096
      1       2      26723.6   LS          inf                0.104

Knitro deduced that the problem is non-convex.

      3       4      129951. DDRD          inf                0.168
     31      31      201572. FCRD          inf                0.225
     39      39      276093.   LS          inf                0.232
     78      59      324807. FCRD          inf                0.284
    586     234      353513. FCRD          inf                0.814
   7893     466      353513.               inf               12.374
  15825     538      353513.               inf               26.231
  16384     543      353513.               inf               27.108

EXIT: Node limit reached. Integer feasible point found.

Final Statistics for MIP
------------------------
Final objective value               =  3.53513363574206363e+05
Final bound value                   =  +inf
Final optimality gap (abs / rel)    =  inf / inf
# of root cutting plane rounds      =  1
# of restarts                       =  0
# of nodes processed                =  16384 (211.279s)
# of strong branching evaluations   =  0 (0.000s)
# of function evaluations           =  0 (0.000s)
# of gradient evaluations           =  0 (0.000s)
# of hessian evaluations            =  0 (0.000s)
# of hessian-vector evaluations     =  0
# of subproblems processed          =  16637 (212.100s)
Total program time (secs)           =  27.11084 (215.465 CPU time)
Time spent in evaluations (secs)    =  0.00000

Cuts statistics (gen / add)
---------------------------
Knapsack cuts                       =  0 / 0
Mixed-integer rounding cuts         =  0 / 0
Flow-cover cuts                     =  0 / 0
Probing cuts                        =  0 / 0

Heuristics statistics (calls / successes / time)
------------------------------------------------
Feasibility pump                    =  2 / 1 / 0.103s
Rounding heuristic                  =  235 / 11 / 0.660s
MPEC heuristic                      =  0 / 0 / 0.000s
Local search heuristic              =  13 / 6 / 0.108s

===========================================================================

WARNING: Loading a SolverResults object with a warning status into
model.name="unknown";
    - termination condition: maxIterations
    - message from solver: Knitro 16.0.0\x3a MIP\x3a Node limit reached.
      Integer feasible point found.; objective 353513.36357420636; optimality
      gap Infinity; 16384 nodes; 16637 subproblem solves
Show the full outputHide the full output
report_layout(field, layout_8)
8 machines, net present value $353,513, covering 78.6% of the field

machine  segments    reach          x          y    covered  share
------------------------------------------------------------------
      1         3      60m      426.4      380.4     11,310   2.8%
      2         4      80m      832.1      359.8     20,106   5.0%
      3         5     100m      641.7      341.4     31,416   7.8%
      4         4      80m       85.3      358.1     20,106   5.0%
      5         7     140m      140.0      140.0     61,575  15.2%
      6         8     160m      453.8      160.0     80,425  19.9%
      7         7     140m      774.4      140.0     61,575  15.2%
      8         5     100m      268.7      342.6     31,416   7.8%

Margin $3,264,563 less $348,849 of machines, $553,106 of segments,
$2,009,094 to operate
draw_layout(field, layout_8)
8 machines, $353,513, 78.6% covered3 segments, 60 m reach34 segments, 80 m reach45 segments, 100 m reach54 segments, 80 m reach47 segments, 140 m reach78 segments, 160 m reach87 segments, 140 m reach75 segments, 100 m reach5

Solving for every count

The number of machines is an input to the model rather than something it decides, so the question of how many to buy is answered by solving once for each count in a reasonable range.

counts = range(3, 15)
layouts = [maximize_npv(field, num_machines) for num_machines in counts]
Show the full outputHide the full output
Artelys Knitro 16.0.0: mip_multistart=1
mip_maxnodes=16384

=======================================
          Commercial License
         Artelys Knitro 16.0.0
=======================================

Knitro changing mip_method from AUTO to 1.
No start point provided -- Knitro computing one.

Knitro presolve eliminated 0 variables (0%) and 0 constraints (0%) in 0.00s.

concurrent_evals         0
datacheck                0
feastol                  1e-06
feastol_abs              1e-06
findiff_numthreads       1
hessian_no_f             1
hessopt                  1
mip_maxnodes             16384
mip_multistart           1
opttol                   1e-06
opttol_abs               0.001
Knitro changing mip_root_nlpalg from AUTO to 1.
Knitro changing mip_node_nlpalg from AUTO to 1.
Knitro changing mip_branchrule from AUTO to 2.
Knitro changing mip_selectrule from AUTO to 2.
Knitro changing mip_mir from AUTO to 2.
Knitro changing mip_clique from AUTO to 0.
Knitro changing mip_zerohalf from AUTO to 0.
Knitro changing mip_liftproject from AUTO to 0.
Knitro changing mip_knapsack from AUTO to 2.
Knitro changing mip_gomory from AUTO to 0.
Knitro changing mip_cut_flowcover from AUTO to 2.
Knitro changing mip_cut_probing from AUTO to 1.
Knitro changing mip_rounding from AUTO to 3.
Knitro changing mip_heuristic_strategy from AUTO to 1.
Knitro changing mip_heuristic_feaspump from AUTO to 1.
Knitro changing mip_heuristic_misqp from AUTO to 0.
Knitro changing mip_heuristic_mpec from AUTO to 1.
Knitro changing mip_heuristic_diving from AUTO to 1926.
Knitro changing mip_heuristic_fixpropagate from AUTO to 62.
Knitro changing mip_heuristic_lns from AUTO to 0.
Knitro changing mip_heuristic_localsearch from AUTO to 1.
Knitro changing mip_pseudoinit from AUTO to 1.

Problem Characteristics                     |           Presolved
-----------------------
Problem type: MIQCQP
Objective: maximize / quadratic
Number of variables:                      9 |                             9
  bounds:         lower     upper     range |     lower     upper     range
                      0         0         9 |         0         0         9
                             free     fixed |                free     fixed
                                0         0 |                   0         0
                  cont.    binary   integer |     cont.    binary   integer
                      6         0         3 |         6         0         3
Number of constraints:                   15 |                            15
                    eq.     ineq.     range |       eq.     ineq.     range
  linear:             0        12         0 |         0        12         0
  quadratic:          0         3         0 |         0         3         0
Number of nonzeros:
              objective  Jacobian   Hessian | objective  Jacobian   Hessian
  linear:             3        24           |         3        24          
  quadratic:          3        18        18 |         3        18        18
  total:              3        42        18 |         3        42        18

Knitro using Branch and Bound method with 8 threads.

Initial points
--------------
No initial point provided for the root node relaxation.
No primal point provided for the MIP.

Coefficient range:
  linear objective:          [2e+04, 2e+04] |                [3e+01, 3e+01]
  linear constraints:        [1e+00, 2e+01] |                [1e+00, 2e+01]
  quadratic objective:       [1e+04, 1e+04] |                [2e+01, 2e+01]
  quadratic constraints:     [1e+00, 8e+02] |                [2e-02, 2e+01]
  variable bounds:           [3e+00, 9e+02] |                [3e+00, 9e+02]
  constraint bounds:         [4e+02, 9e+02] |                [4e+02, 9e+02]

Root node relaxation
--------------------

 Iter      Objective      Feasibility        Optimality       Time 
                             error              error        (secs)
 ----      ---------      -----------        ----------      ------
    0   -1.88632e+06          14400.5          0.501635       0.046
    1   -2.06819e+06          4167.22          0.842228       0.046
    2   -2.10427e+06          1234.37           3.39503       0.046
    3   -2.10698e+06          111.217           1.26369       0.047
    4   -2.10695e+06          59.7654           1.26369       0.047
    5   -2.10642e+06          92.8391           6.41785       0.047
    6   -2.09065e+06          13.1853           2.33209       0.047
    7   -2.08488e+06          3.70580           2.26512       0.047
    8   -2.04651e+06          2.10497           3.51711       0.047
    9   -1.97529e+06          1.99335           5.37828       0.047
   10   -1.90748e+06          1.92130           6.61155       0.047
   11   -1.90118e+06          1.84598           6.68489       0.047
   12   -1.79043e+06      0.00000e+00           25.4903       0.047
   13   -1.88553e+06      0.00000e+00           20.5534       0.048
   14   -1.83404e+06      0.00000e+00           20.7001       0.048
   15   -1.88170e+06      0.00000e+00           23.5012       0.048
   16   -1.79059e+06      0.00000e+00           26.2563       0.048
   17   -1.63380e+06          1097.77           28.0065       0.048
   18   -1.38461e+06          17.6110           8.43785       0.048
   19   -1.09667e+06          618.684           10.7709       0.048
   20       -849069.          303.318           23.1336       0.048
   30       -1493.85      0.00000e+00           17.7717       0.049

Tree search
-----------

       Nodes        Best solution   Best bound      Gap       Time 
   Expl  |  Unexpl      value         value                  (secs)
   ---------------  -------------   ----------      ---      ------
      1       1      5678.31 LEAF          inf                0.051
    200       0      5678.31           5678.31      0.00%     0.649

EXIT: Optimal solution found (assuming convexity).

Final Statistics for MIP
------------------------
Final objective value               =  5.67831437182333320e+03
Final bound value                   =  5.67831437182333320e+03
Final optimality gap (abs / rel)    =  0.00000e+00 / 0.00000e+00 (0.00%)
# of root cutting plane rounds      =  0
# of restarts                       =  0
# of nodes processed                =  200 (0.610s)
# of strong branching evaluations   =  0 (0.000s)
# of function evaluations           =  0 (0.000s)
# of gradient evaluations           =  0 (0.000s)
# of hessian evaluations            =  0 (0.000s)
# of hessian-vector evaluations     =  0
# of subproblems processed          =  200 (0.610s)
Total program time (secs)           =  0.64910 (0.644 CPU time)
Time spent in evaluations (secs)    =  0.00000

Cuts statistics (gen / add)
---------------------------
Knapsack cuts                       =  0 / 0
Mixed-integer rounding cuts         =  0 / 0
Flow-cover cuts                     =  0 / 0
Probing cuts                        =  0 / 0

Heuristics statistics (calls / successes / time)
------------------------------------------------
Feasibility pump                    =  0 / 0 / 0.000s
Rounding heuristic                  =  0 / 0 / 0.000s
MPEC heuristic                      =  0 / 0 / 0.000s
Local search heuristic              =  5 / 4 / 0.011s

===========================================================================

Artelys Knitro 16.0.0: mip_multistart=1
mip_maxnodes=16384

=======================================
          Commercial License
         Artelys Knitro 16.0.0
=======================================

Knitro changing mip_method from AUTO to 1.
No start point provided -- Knitro computing one.

Knitro presolve eliminated 0 variables (0%) and 0 constraints (0%) in 0.00s.

concurrent_evals         0
datacheck                0
feastol                  1e-06
feastol_abs              1e-06
findiff_numthreads       1
hessian_no_f             1
hessopt                  1
mip_maxnodes             16384
mip_multistart           1
opttol                   1e-06
opttol_abs               0.001
Knitro changing mip_root_nlpalg from AUTO to 1.
Knitro changing mip_node_nlpalg from AUTO to 1.
Knitro changing mip_branchrule from AUTO to 2.
Knitro changing mip_selectrule from AUTO to 2.
Knitro changing mip_mir from AUTO to 2.
Knitro changing mip_clique from AUTO to 0.
Knitro changing mip_zerohalf from AUTO to 0.
Knitro changing mip_liftproject from AUTO to 0.
Knitro changing mip_knapsack from AUTO to 2.
Knitro changing mip_gomory from AUTO to 0.
Knitro changing mip_cut_flowcover from AUTO to 2.
Knitro changing mip_cut_probing from AUTO to 1.
Knitro changing mip_rounding from AUTO to 3.
Knitro changing mip_heuristic_strategy from AUTO to 1.
Knitro changing mip_heuristic_feaspump from AUTO to 1.
Knitro changing mip_heuristic_misqp from AUTO to 0.
Knitro changing mip_heuristic_mpec from AUTO to 1.
Knitro changing mip_heuristic_diving from AUTO to 1926.
Knitro changing mip_heuristic_fixpropagate from AUTO to 62.
Knitro changing mip_heuristic_lns from AUTO to 0.
Knitro changing mip_heuristic_localsearch from AUTO to 1.
Knitro changing mip_pseudoinit from AUTO to 1.

Problem Characteristics                     |           Presolved
-----------------------
Problem type: MIQCQP
Objective: maximize / quadratic
Number of variables:                     12 |                            12
  bounds:         lower     upper     range |     lower     upper     range
                      0         0        12 |         0         0        12
                             free     fixed |                free     fixed
                                0         0 |                   0         0
                  cont.    binary   integer |     cont.    binary   integer
                      8         0         4 |         8         0         4
Number of constraints:                   22 |                            22
                    eq.     ineq.     range |       eq.     ineq.     range
  linear:             0        16         0 |         0        16         0
  quadratic:          0         6         0 |         0         6         0
Number of nonzeros:
              objective  Jacobian   Hessian | objective  Jacobian   Hessian
  linear:             4        32           |         4        32          
  quadratic:          4        36        30 |         4        36        30
  total:              4        68        30 |         4        68        30

Knitro using Branch and Bound method with 8 threads.

Initial points
--------------
No initial point provided for the root node relaxation.
No primal point provided for the MIP.

Coefficient range:
  linear objective:          [2e+04, 2e+04] |                [3e+01, 3e+01]
  linear constraints:        [1e+00, 2e+01] |                [1e+00, 2e+01]
  quadratic objective:       [1e+04, 1e+04] |                [2e+01, 2e+01]
  quadratic constraints:     [1e+00, 8e+02] |                [2e-02, 2e+01]
  variable bounds:           [3e+00, 9e+02] |                [3e+00, 9e+02]
  constraint bounds:         [4e+02, 9e+02] |                [4e+02, 9e+02]

Root node relaxation
--------------------

 Iter      Objective      Feasibility        Optimality       Time 
                             error              error        (secs)
 ----      ---------      -----------        ----------      ------
    0   -1.84540e+06          14400.9          0.405803       0.050
    1   -2.08787e+06          4168.14          0.807571       0.050
    2   -2.13661e+06          1170.59           1.70845       0.051
    3   -2.13934e+06          412.886           2.46895       0.051
    4   -2.13865e+06          315.701           2.53609       0.051
    5   -2.13823e+06          268.085           2.56761       0.051
    6   -2.13791e+06          232.825           2.58594       0.051
    7   -2.13772e+06          200.157           2.59659       0.051
    8   -2.13774e+06          170.926           2.59645       0.051
    9   -2.13788e+06          141.808           2.58998       0.052
   10   -2.13823e+06          119.556           2.57123       0.052
   11   -2.13883e+06          23.7446           2.53085       0.052
   12   -2.13910e+06          2.50803           2.50803       0.052
   13   -2.13961e+06          52.0198           1.67954       0.052
   14   -2.13700e+06          55.2317           8.91996       0.052
   15   -2.13410e+06          20.6321           6.36662       0.052
   16   -2.12915e+06          36.5047           5.57905       0.052
   17   -2.11475e+06          16.0126           4.18197       0.053
   18   -2.05463e+06          1.93271           4.66114       0.053
   19   -1.97220e+06          1.87812           6.75993       0.053
   20   -1.81578e+06          1.82578           9.63717       0.053
   30       -393714.      0.00000e+00           16.7042       0.054
   40        20296.1      0.00000e+00           6.03313       0.055

Tree search
-----------

       Nodes        Best solution   Best bound      Gap       Time 
   Expl  |  Unexpl      value         value                  (secs)
   ---------------  -------------   ----------      ---      ------
      1       2     -56630.4 FCRD          inf                0.060
      3       4      43697.2 FCRD          inf                0.068

Knitro deduced that the problem is non-convex.

     13      10      46596.8 FCRD          inf                0.082
   6438       5      46596.8               inf                3.681

EXIT: Satisfactory solution found.

Final Statistics for MIP
------------------------
Final objective value               =  4.65968443674487062e+04
Final bound value                   =  +inf
Final optimality gap (abs / rel)    =  inf / inf
# of root cutting plane rounds      =  1
# of restarts                       =  0
# of nodes processed                =  6663 (23.865s)
# of strong branching evaluations   =  0 (0.000s)
# of function evaluations           =  0 (0.000s)
# of gradient evaluations           =  0 (0.000s)
# of hessian evaluations            =  0 (0.000s)
# of hessian-vector evaluations     =  0
# of subproblems processed          =  6703 (23.964s)
Total program time (secs)           =  4.05624 (25.026 CPU time)
Time spent in evaluations (secs)    =  0.00000

Cuts statistics (gen / add)
---------------------------
Knapsack cuts                       =  0 / 0
Mixed-integer rounding cuts         =  0 / 0
Flow-cover cuts                     =  0 / 0
Probing cuts                        =  0 / 0

Heuristics statistics (calls / successes / time)
------------------------------------------------
Feasibility pump                    =  1 / 1 / 0.011s
Rounding heuristic                  =  32 / 6 / 0.077s
MPEC heuristic                      =  0 / 0 / 0.000s
Local search heuristic              =  9 / 4 / 0.020s

===========================================================================

Artelys Knitro 16.0.0: mip_multistart=1
mip_maxnodes=16384

=======================================
          Commercial License
         Artelys Knitro 16.0.0
=======================================

Knitro changing mip_method from AUTO to 1.
No start point provided -- Knitro computing one.

Knitro presolve eliminated 0 variables (0%) and 0 constraints (0%) in 0.00s.

concurrent_evals         0
datacheck                0
feastol                  1e-06
feastol_abs              1e-06
findiff_numthreads       1
hessian_no_f             1
hessopt                  1
mip_maxnodes             16384
mip_multistart           1
opttol                   1e-06
opttol_abs               0.001
Knitro changing mip_root_nlpalg from AUTO to 1.
Knitro changing mip_node_nlpalg from AUTO to 1.
Knitro changing mip_branchrule from AUTO to 2.
Knitro changing mip_selectrule from AUTO to 2.
Knitro changing mip_mir from AUTO to 2.
Knitro changing mip_clique from AUTO to 0.
Knitro changing mip_zerohalf from AUTO to 0.
Knitro changing mip_liftproject from AUTO to 0.
Knitro changing mip_knapsack from AUTO to 2.
Knitro changing mip_gomory from AUTO to 0.
Knitro changing mip_cut_flowcover from AUTO to 2.
Knitro changing mip_cut_probing from AUTO to 1.
Knitro changing mip_rounding from AUTO to 3.
Knitro changing mip_heuristic_strategy from AUTO to 1.
Knitro changing mip_heuristic_feaspump from AUTO to 1.
Knitro changing mip_heuristic_misqp from AUTO to 0.
Knitro changing mip_heuristic_mpec from AUTO to 1.
Knitro changing mip_heuristic_diving from AUTO to 1926.
Knitro changing mip_heuristic_fixpropagate from AUTO to 62.
Knitro changing mip_heuristic_lns from AUTO to 0.
Knitro changing mip_heuristic_localsearch from AUTO to 1.
Knitro changing mip_pseudoinit from AUTO to 1.

Problem Characteristics                     |           Presolved
-----------------------
Problem type: MIQCQP
Objective: maximize / quadratic
Number of variables:                     15 |                            15
  bounds:         lower     upper     range |     lower     upper     range
                      0         0        15 |         0         0        15
                             free     fixed |                free     fixed
                                0         0 |                   0         0
                  cont.    binary   integer |     cont.    binary   integer
                     10         0         5 |        10         0         5
Number of constraints:                   30 |                            30
                    eq.     ineq.     range |       eq.     ineq.     range
  linear:             0        20         0 |         0        20         0
  quadratic:          0        10         0 |         0        10         0
Number of nonzeros:
              objective  Jacobian   Hessian | objective  Jacobian   Hessian
  linear:             5        40           |         5        40          
  quadratic:          5        60        45 |         5        60        45
  total:              5       100        45 |         5       100        45

Knitro using Branch and Bound method with 8 threads.

Initial points
--------------
No initial point provided for the root node relaxation.
No primal point provided for the MIP.

Coefficient range:
  linear objective:          [2e+04, 2e+04] |                [3e+01, 3e+01]
  linear constraints:        [1e+00, 2e+01] |                [1e+00, 2e+01]
  quadratic objective:       [1e+04, 1e+04] |                [2e+01, 2e+01]
  quadratic constraints:     [1e+00, 8e+02] |                [2e-02, 2e+01]
  variable bounds:           [3e+00, 9e+02] |                [3e+00, 9e+02]
  constraint bounds:         [4e+02, 9e+02] |                [4e+02, 9e+02]

Root node relaxation
--------------------

 Iter      Objective      Feasibility        Optimality       Time 
                             error              error        (secs)
 ----      ---------      -----------        ----------      ------
    0   -1.80447e+06          14401.0          0.325242       0.010
    1   -2.10756e+06          4168.43          0.812609       0.011
    2   -2.16887e+06          1137.06           3.43957       0.011
    3   -2.17160e+06          400.918           2.49868       0.011
    4   -2.17061e+06          296.328           2.57022       0.011
    5   -2.17028e+06          262.835           2.59699       0.011
    6   -2.17000e+06          235.623           2.61645       0.012
    7   -2.16973e+06          210.443           2.63277       0.012
    8   -2.16955e+06          181.069           2.64461       0.012
    9   -2.16965e+06          172.926           2.64238       0.012
   10   -2.16971e+06          154.353           2.64316       0.012
   11   -2.16997e+06          160.791           2.63243       0.012
   12   -2.17021e+06          151.746           2.62253       0.013
   13   -2.17034e+06          132.233           2.61898       0.013
   14   -2.17108e+06          132.136           2.57786       0.013
   15   -2.17123e+06          131.574           2.56734       0.013
   16   -2.17148e+06          130.268           2.54818       0.013
   17   -2.17118e+06          118.390           2.53168       0.013
   18   -2.16638e+06          88.2926           2.50191       0.013
   19   -2.16220e+06          80.8362           2.47693       0.014
   20   -2.11676e+06          54.5914           3.93852       0.014
   30   -1.66705e+06          511.526           6.17690       0.015
   40       -747510.      0.00000e+00           56.5714       0.017
   50       -457676.      0.00000e+00           11.3599       0.018
   60        4426.14      0.00000e+00           30.8073       0.019
   70        198100.      0.00000e+00       7.91531e-05       0.020

Tree search
-----------

       Nodes        Best solution   Best bound      Gap       Time 
   Expl  |  Unexpl      value         value                  (secs)
   ---------------  -------------   ----------      ---      ------
      1       2     -15711.9 FCRD          inf                0.025

Knitro deduced that the problem is non-convex.

      5       6      159137.   FP          inf                0.047
     29      19      159137. FCRD          inf                0.071
     48      27      159137. FCRD          inf                0.092
   7933      95      159137.               inf                5.717
  15931     114      159137.               inf               11.175
  16387     115      159137.               inf               11.462

EXIT: Node limit reached. Integer feasible point found.

Final Statistics for MIP
------------------------
Final objective value               =  1.59136573975202627e+05
Final bound value                   =  +inf
Final optimality gap (abs / rel)    =  inf / inf
# of root cutting plane rounds      =  1
# of restarts                       =  0
# of nodes processed                =  16387 (88.074s)
# of strong branching evaluations   =  0 (0.000s)
# of function evaluations           =  0 (0.000s)
# of gradient evaluations           =  0 (0.000s)
# of hessian evaluations            =  0 (0.000s)
# of hessian-vector evaluations     =  0
# of subproblems processed          =  16544 (88.462s)
Total program time (secs)           =  11.46296 (91.149 CPU time)
Time spent in evaluations (secs)    =  0.00000

Cuts statistics (gen / add)
---------------------------
Knapsack cuts                       =  0 / 0
Mixed-integer rounding cuts         =  0 / 0
Flow-cover cuts                     =  0 / 0
Probing cuts                        =  0 / 0

Heuristics statistics (calls / successes / time)
------------------------------------------------
Feasibility pump                    =  1 / 1 / 0.011s
Rounding heuristic                  =  148 / 9 / 0.372s
MPEC heuristic                      =  0 / 0 / 0.000s
Local search heuristic              =  10 / 5 / 0.036s

===========================================================================

WARNING: Loading a SolverResults object with a warning status into
model.name="unknown";
    - termination condition: maxIterations
    - message from solver: Knitro 16.0.0\x3a MIP\x3a Node limit reached.
      Integer feasible point found.; objective 159136.57397520263; optimality
      gap Infinity; 16387 nodes; 16544 subproblem solves
Artelys Knitro 16.0.0: mip_multistart=1
mip_maxnodes=16384

=======================================
          Commercial License
         Artelys Knitro 16.0.0
=======================================

Knitro changing mip_method from AUTO to 1.
No start point provided -- Knitro computing one.

Knitro presolve eliminated 0 variables (0%) and 0 constraints (0%) in 0.00s.

concurrent_evals         0
datacheck                0
feastol                  1e-06
feastol_abs              1e-06
findiff_numthreads       1
hessian_no_f             1
hessopt                  1
mip_maxnodes             16384
mip_multistart           1
opttol                   1e-06
opttol_abs               0.001
Knitro changing mip_root_nlpalg from AUTO to 1.
Knitro changing mip_node_nlpalg from AUTO to 1.
Knitro changing mip_branchrule from AUTO to 2.
Knitro changing mip_selectrule from AUTO to 2.
Knitro changing mip_mir from AUTO to 2.
Knitro changing mip_clique from AUTO to 0.
Knitro changing mip_zerohalf from AUTO to 0.
Knitro changing mip_liftproject from AUTO to 0.
Knitro changing mip_knapsack from AUTO to 2.
Knitro changing mip_gomory from AUTO to 0.
Knitro changing mip_cut_flowcover from AUTO to 2.
Knitro changing mip_cut_probing from AUTO to 1.
Knitro changing mip_rounding from AUTO to 3.
Knitro changing mip_heuristic_strategy from AUTO to 1.
Knitro changing mip_heuristic_feaspump from AUTO to 1.
Knitro changing mip_heuristic_misqp from AUTO to 0.
Knitro changing mip_heuristic_mpec from AUTO to 1.
Knitro changing mip_heuristic_diving from AUTO to 1926.
Knitro changing mip_heuristic_fixpropagate from AUTO to 62.
Knitro changing mip_heuristic_lns from AUTO to 0.
Knitro changing mip_heuristic_localsearch from AUTO to 1.
Knitro changing mip_pseudoinit from AUTO to 1.

Problem Characteristics                     |           Presolved
-----------------------
Problem type: MIQCQP
Objective: maximize / quadratic
Number of variables:                     18 |                            18
  bounds:         lower     upper     range |     lower     upper     range
                      0         0        18 |         0         0        18
                             free     fixed |                free     fixed
                                0         0 |                   0         0
                  cont.    binary   integer |     cont.    binary   integer
                     12         0         6 |        12         0         6
Number of constraints:                   39 |                            39
                    eq.     ineq.     range |       eq.     ineq.     range
  linear:             0        24         0 |         0        24         0
  quadratic:          0        15         0 |         0        15         0
Number of nonzeros:
              objective  Jacobian   Hessian | objective  Jacobian   Hessian
  linear:             6        48           |         6        48          
  quadratic:          6        90        63 |         6        90        63
  total:              6       138        63 |         6       138        63

Knitro using Branch and Bound method with 8 threads.

Initial points
--------------
No initial point provided for the root node relaxation.
No primal point provided for the MIP.

Coefficient range:
  linear objective:          [2e+04, 2e+04] |                [3e+01, 3e+01]
  linear constraints:        [1e+00, 2e+01] |                [1e+00, 2e+01]
  quadratic objective:       [1e+04, 1e+04] |                [2e+01, 2e+01]
  quadratic constraints:     [1e+00, 8e+02] |                [2e-02, 2e+01]
  variable bounds:           [3e+00, 9e+02] |                [3e+00, 9e+02]
  constraint bounds:         [4e+02, 9e+02] |                [4e+02, 9e+02]

Root node relaxation
--------------------

 Iter      Objective      Feasibility        Optimality       Time 
                             error              error        (secs)
 ----      ---------      -----------        ----------      ------
    0   -1.76355e+06          14400.9          0.309700       0.012
    1   -2.12725e+06          4168.71          0.825003       0.012
    2   -2.20109e+06          1116.69           2.55192       0.012
    3   -2.20372e+06          380.694           2.52326       0.012
    4   -2.20162e+06          301.184           2.63173       0.013
    5   -2.20027e+06          253.939           2.67807       0.013
    6   -2.19910e+06          225.481           2.71462       0.013
    7   -2.19822e+06          197.827           2.73975       0.013
    8   -2.19798e+06          157.203           2.74807       0.013
    9   -2.19794e+06          116.356           2.75150       0.014
   10   -2.20015e+06          117.185           2.69775       0.014
   11   -2.20058e+06          94.9885           2.68577       0.014
   12   -2.20151e+06          69.9709           2.65798       0.014
   13   -2.20216e+06          13.0110           2.63593       0.014
   14   -2.20472e+06          7.96774           2.48351       0.015
   15   -2.20438e+06          9.23421           4.46614       0.015
   16   -2.20397e+06          4.37353           5.31762       0.015
   17   -2.19688e+06          99.5102           22.9065       0.015
   18   -2.19168e+06          23.3763           2.59914       0.015
   19   -2.18321e+06          83.7613           4.79058       0.015
   20   -2.16916e+06          25.8680           2.47774       0.016
   30   -1.61086e+06          363.544           49.1107       0.017
   40       -515446.      0.00000e+00           9.46295       0.019
   50       -189972.      0.00000e+00           1.58248       0.020
   60        103406.      0.00000e+00           8.91541       0.022

Tree search
-----------

       Nodes        Best solution   Best bound      Gap       Time 
   Expl  |  Unexpl      value         value                  (secs)
   ---------------  -------------   ----------      ---      ------
      1       2      48113.8 FCRD          inf                0.027

Knitro deduced that the problem is non-convex.

     15      16      148441. FCRD          inf                0.057
     54      47      200055. FCRD          inf                0.099
   7853     187      200055.               inf                7.567
  15814     246      200055.               inf               14.970
  16386     248      200055.               inf               15.477

EXIT: Node limit reached. Integer feasible point found.

Final Statistics for MIP
------------------------
Final objective value               =  2.00055103970827535e+05
Final bound value                   =  +inf
Final optimality gap (abs / rel)    =  inf / inf
# of root cutting plane rounds      =  1
# of restarts                       =  0
# of nodes processed                =  16386 (119.654s)
# of strong branching evaluations   =  0 (0.000s)
# of function evaluations           =  0 (0.000s)
# of gradient evaluations           =  0 (0.000s)
# of hessian evaluations            =  0 (0.000s)
# of hessian-vector evaluations     =  0
# of subproblems processed          =  16611 (120.225s)
Total program time (secs)           =  15.47940 (123.054 CPU time)
Time spent in evaluations (secs)    =  0.00000

Cuts statistics (gen / add)
---------------------------
Knapsack cuts                       =  0 / 0
Mixed-integer rounding cuts         =  0 / 0
Flow-cover cuts                     =  0 / 0
Probing cuts                        =  0 / 0

Heuristics statistics (calls / successes / time)
------------------------------------------------
Feasibility pump                    =  1 / 0 / 0.002s
Rounding heuristic                  =  221 / 10 / 0.591s
MPEC heuristic                      =  0 / 0 / 0.000s
Local search heuristic              =  9 / 5 / 0.043s

===========================================================================

WARNING: Loading a SolverResults object with a warning status into
model.name="unknown";
    - termination condition: maxIterations
    - message from solver: Knitro 16.0.0\x3a MIP\x3a Node limit reached.
      Integer feasible point found.; objective 200055.10397082753; optimality
      gap Infinity; 16386 nodes; 16611 subproblem solves
Artelys Knitro 16.0.0: mip_multistart=1
mip_maxnodes=16384

=======================================
          Commercial License
         Artelys Knitro 16.0.0
=======================================

Knitro changing mip_method from AUTO to 1.
No start point provided -- Knitro computing one.

Knitro presolve eliminated 0 variables (0%) and 0 constraints (0%) in 0.00s.

concurrent_evals         0
datacheck                0
feastol                  1e-06
feastol_abs              1e-06
findiff_numthreads       1
hessian_no_f             1
hessopt                  1
mip_maxnodes             16384
mip_multistart           1
opttol                   1e-06
opttol_abs               0.001
Knitro changing mip_root_nlpalg from AUTO to 1.
Knitro changing mip_node_nlpalg from AUTO to 1.
Knitro changing mip_branchrule from AUTO to 2.
Knitro changing mip_selectrule from AUTO to 2.
Knitro changing mip_mir from AUTO to 2.
Knitro changing mip_clique from AUTO to 0.
Knitro changing mip_zerohalf from AUTO to 0.
Knitro changing mip_liftproject from AUTO to 0.
Knitro changing mip_knapsack from AUTO to 2.
Knitro changing mip_gomory from AUTO to 0.
Knitro changing mip_cut_flowcover from AUTO to 2.
Knitro changing mip_cut_probing from AUTO to 1.
Knitro changing mip_rounding from AUTO to 3.
Knitro changing mip_heuristic_strategy from AUTO to 1.
Knitro changing mip_heuristic_feaspump from AUTO to 1.
Knitro changing mip_heuristic_misqp from AUTO to 0.
Knitro changing mip_heuristic_mpec from AUTO to 1.
Knitro changing mip_heuristic_diving from AUTO to 1926.
Knitro changing mip_heuristic_fixpropagate from AUTO to 62.
Knitro changing mip_heuristic_lns from AUTO to 0.
Knitro changing mip_heuristic_localsearch from AUTO to 1.
Knitro changing mip_pseudoinit from AUTO to 1.

Problem Characteristics                     |           Presolved
-----------------------
Problem type: MIQCQP
Objective: maximize / quadratic
Number of variables:                     21 |                            21
  bounds:         lower     upper     range |     lower     upper     range
                      0         0        21 |         0         0        21
                             free     fixed |                free     fixed
                                0         0 |                   0         0
                  cont.    binary   integer |     cont.    binary   integer
                     14         0         7 |        14         0         7
Number of constraints:                   49 |                            49
                    eq.     ineq.     range |       eq.     ineq.     range
  linear:             0        28         0 |         0        28         0
  quadratic:          0        21         0 |         0        21         0
Number of nonzeros:
              objective  Jacobian   Hessian | objective  Jacobian   Hessian
  linear:             7        56           |         7        56          
  quadratic:          7       126        84 |         7       126        84
  total:              7       182        84 |         7       182        84

Knitro using Branch and Bound method with 8 threads.

Initial points
--------------
No initial point provided for the root node relaxation.
No primal point provided for the MIP.

Coefficient range:
  linear objective:          [2e+04, 2e+04] |                [3e+01, 3e+01]
  linear constraints:        [1e+00, 2e+01] |                [1e+00, 2e+01]
  quadratic objective:       [1e+04, 1e+04] |                [2e+01, 2e+01]
  quadratic constraints:     [1e+00, 8e+02] |                [2e-02, 2e+01]
  variable bounds:           [3e+00, 9e+02] |                [3e+00, 9e+02]
  constraint bounds:         [4e+02, 9e+02] |                [4e+02, 9e+02]

Root node relaxation
--------------------

 Iter      Objective      Feasibility        Optimality       Time 
                             error              error        (secs)
 ----      ---------      -----------        ----------      ------
    0   -1.72262e+06          14400.9          0.244790       0.015
    1   -2.14694e+06          4168.80          0.853542       0.015
    2   -2.23330e+06          1102.75           2.16985       0.016
    3   -2.23585e+06          338.041           2.53484       0.016
    4   -2.23247e+06          205.204           2.66089       0.016
    5   -2.23059e+06          150.239           2.70685       0.016
    6   -2.22955e+06          123.198           2.72925       0.017
    7   -2.22899e+06          102.116           2.74276       0.017
    8   -2.22865e+06          80.7539           2.75485       0.017
    9   -2.22870e+06          65.5838           2.75857       0.017
   10   -2.22907e+06          50.7054           2.75526       0.018
   11   -2.23189e+06          37.6813           2.69621       0.018
   12   -2.23242e+06          23.0712           2.68541       0.018
   13   -2.23356e+06          49.2455           2.65545       0.018
   14   -2.23677e+06          37.1895           2.52062       0.018
   15   -2.23677e+06          32.3409           7.56834       0.019
   16   -2.23428e+06          26.7500           3.22402       0.019
   17   -2.22477e+06          50.4409           2.30554       0.019
   18   -2.20441e+06          14.6173           2.29534       0.019
   19   -2.18891e+06          13.1769           2.79701       0.019
   20   -2.11495e+06          11.9943           4.69835       0.020
   30   -1.06835e+06      0.00000e+00           9.43860       0.022
   40       -570241.          659.182           5.93091       0.024
   50       -180137.      0.00000e+00           9.54394       0.026
   60        69174.2      0.00000e+00           3.32023       0.028

Tree search
-----------

       Nodes        Best solution   Best bound      Gap       Time 
   Expl  |  Unexpl      value         value                  (secs)
   ---------------  -------------   ----------      ---      ------
      1       2     -11295.3 FCRD          inf                0.032

Knitro deduced that the problem is non-convex.

      3       4      66125.2 FCRD          inf                0.050
      7       8      140646.   LS          inf                0.062
     13      14      169352. FCRD          inf                0.073
     28      29      189360. FCRD          inf                0.096
     36      37      240974. FCRD          inf                0.104
    146     114      312595. FCRD          inf                0.194
   7846     218      312595.               inf                8.253
  15592     289      312595.               inf               16.722
  16388     295      312595.               inf               17.679

EXIT: Node limit reached. Integer feasible point found.

Final Statistics for MIP
------------------------
Final objective value               =  3.12594833578581456e+05
Final bound value                   =  +inf
Final optimality gap (abs / rel)    =  inf / inf
# of root cutting plane rounds      =  1
# of restarts                       =  0
# of nodes processed                =  16388 (136.829s)
# of strong branching evaluations   =  0 (0.000s)
# of function evaluations           =  0 (0.000s)
# of gradient evaluations           =  0 (0.000s)
# of hessian evaluations            =  0 (0.000s)
# of hessian-vector evaluations     =  0
# of subproblems processed          =  16581 (137.315s)
Total program time (secs)           =  17.68055 (140.356 CPU time)
Time spent in evaluations (secs)    =  0.00000

Cuts statistics (gen / add)
---------------------------
Knapsack cuts                       =  0 / 0
Mixed-integer rounding cuts         =  0 / 0
Flow-cover cuts                     =  0 / 0
Probing cuts                        =  0 / 0

Heuristics statistics (calls / successes / time)
------------------------------------------------
Feasibility pump                    =  2 / 0 / 0.039s
Rounding heuristic                  =  178 / 15 / 0.455s
MPEC heuristic                      =  0 / 0 / 0.000s
Local search heuristic              =  13 / 6 / 0.077s

===========================================================================

WARNING: Loading a SolverResults object with a warning status into
model.name="unknown";
    - termination condition: maxIterations
    - message from solver: Knitro 16.0.0\x3a MIP\x3a Node limit reached.
      Integer feasible point found.; objective 312594.83357858146; optimality
      gap Infinity; 16388 nodes; 16581 subproblem solves
Artelys Knitro 16.0.0: mip_multistart=1
mip_maxnodes=16384

=======================================
          Commercial License
         Artelys Knitro 16.0.0
=======================================

Knitro changing mip_method from AUTO to 1.
No start point provided -- Knitro computing one.

Knitro presolve eliminated 0 variables (0%) and 0 constraints (0%) in 0.00s.

concurrent_evals         0
datacheck                0
feastol                  1e-06
feastol_abs              1e-06
findiff_numthreads       1
hessian_no_f             1
hessopt                  1
mip_maxnodes             16384
mip_multistart           1
opttol                   1e-06
opttol_abs               0.001
Knitro changing mip_root_nlpalg from AUTO to 1.
Knitro changing mip_node_nlpalg from AUTO to 1.
Knitro changing mip_branchrule from AUTO to 2.
Knitro changing mip_selectrule from AUTO to 2.
Knitro changing mip_mir from AUTO to 2.
Knitro changing mip_clique from AUTO to 0.
Knitro changing mip_zerohalf from AUTO to 0.
Knitro changing mip_liftproject from AUTO to 0.
Knitro changing mip_knapsack from AUTO to 2.
Knitro changing mip_gomory from AUTO to 0.
Knitro changing mip_cut_flowcover from AUTO to 2.
Knitro changing mip_cut_probing from AUTO to 1.
Knitro changing mip_rounding from AUTO to 3.
Knitro changing mip_heuristic_strategy from AUTO to 1.
Knitro changing mip_heuristic_feaspump from AUTO to 1.
Knitro changing mip_heuristic_misqp from AUTO to 0.
Knitro changing mip_heuristic_mpec from AUTO to 1.
Knitro changing mip_heuristic_diving from AUTO to 1926.
Knitro changing mip_heuristic_fixpropagate from AUTO to 62.
Knitro changing mip_heuristic_lns from AUTO to 0.
Knitro changing mip_heuristic_localsearch from AUTO to 1.
Knitro changing mip_pseudoinit from AUTO to 1.

Problem Characteristics                     |           Presolved
-----------------------
Problem type: MIQCQP
Objective: maximize / quadratic
Number of variables:                     24 |                            24
  bounds:         lower     upper     range |     lower     upper     range
                      0         0        24 |         0         0        24
                             free     fixed |                free     fixed
                                0         0 |                   0         0
                  cont.    binary   integer |     cont.    binary   integer
                     16         0         8 |        16         0         8
Number of constraints:                   60 |                            60
                    eq.     ineq.     range |       eq.     ineq.     range
  linear:             0        32         0 |         0        32         0
  quadratic:          0        28         0 |         0        28         0
Number of nonzeros:
              objective  Jacobian   Hessian | objective  Jacobian   Hessian
  linear:             8        64           |         8        64          
  quadratic:          8       168       108 |         8       168       108
  total:              8       232       108 |         8       232       108

Knitro using Branch and Bound method with 8 threads.

Initial points
--------------
No initial point provided for the root node relaxation.
No primal point provided for the MIP.

Coefficient range:
  linear objective:          [2e+04, 2e+04] |                [3e+01, 3e+01]
  linear constraints:        [1e+00, 2e+01] |                [1e+00, 2e+01]
  quadratic objective:       [1e+04, 1e+04] |                [2e+01, 2e+01]
  quadratic constraints:     [1e+00, 8e+02] |                [2e-02, 2e+01]
  variable bounds:           [3e+00, 9e+02] |                [3e+00, 9e+02]
  constraint bounds:         [4e+02, 9e+02] |                [4e+02, 9e+02]

Root node relaxation
--------------------

 Iter      Objective      Feasibility        Optimality       Time 
                             error              error        (secs)
 ----      ---------      -----------        ----------      ------
    0   -1.68170e+06          14400.9          0.211068       0.019
    1   -2.16662e+06          4168.94          0.883468       0.019
    2   -2.26549e+06          1092.99           2.17355       0.020
    3   -2.26807e+06          339.753           2.54056       0.020
    4   -2.26491e+06          260.932           2.65815       0.020
    5   -2.26283e+06          218.536           2.70606       0.020
    6   -2.26142e+06          192.766           2.73660       0.021
    7   -2.26055e+06          169.998           2.75323       0.021
    8   -2.26013e+06          152.644           2.76265       0.021
    9   -2.25975e+06          137.853           2.77337       0.022
   10   -2.25951e+06          123.626           2.78079       0.022
   11   -2.26022e+06          128.740           2.76929       0.022
   12   -2.26036e+06          110.239           2.76954       0.023
   13   -2.26062e+06          100.133           2.76746       0.023
   14   -2.26147e+06          97.2033           2.75282       0.023
   15   -2.26227e+06          86.6805           2.73710       0.024
   16   -2.26340e+06          82.5117           2.71494       0.024
   17   -2.26488e+06          68.6615           2.68155       0.025
   18   -2.26605e+06          64.0655           2.65265       0.025
   19   -2.26688e+06          55.3387           2.62733       0.026
   20   -2.26779e+06          45.5852           2.59725       0.026
   30   -2.23557e+06          9.53453           4.36023       0.031
   40   -1.65424e+06          232.595           4.82700       0.035
   50   -1.11012e+06          152.262           9.92205       0.038
   60       -747654.      0.00000e+00           18.6515       0.042
   70       -366752.      0.00000e+00           32.0751       0.045
   80       -47698.0      0.00000e+00           1.38662       0.049
   90        194786.      0.00000e+00           11.4787       0.052
  100        224245.      0.00000e+00       2.09363e-03       0.055

Tree search
-----------

       Nodes        Best solution   Best bound      Gap       Time 
   Expl  |  Unexpl      value         value                  (secs)
   ---------------  -------------   ----------      ---      ------
      1       2     -47797.2 FCRD          inf                0.060
      1       2      26723.6   LS          inf                0.064

Knitro deduced that the problem is non-convex.

      3       4      129951. DDRD          inf                0.098
     31      31      201572. FCRD          inf                0.142
     39      39      276093.   LS          inf                0.147
     78      59      324807. FCRD          inf                0.200
    586     234      353513. FCRD          inf                0.735
   7893     466      353513.               inf               12.204
  15825     538      353513.               inf               25.883
  16384     543      353513.               inf               26.752

EXIT: Node limit reached. Integer feasible point found.

Final Statistics for MIP
------------------------
Final objective value               =  3.53513363574206363e+05
Final bound value                   =  +inf
Final optimality gap (abs / rel)    =  inf / inf
# of root cutting plane rounds      =  1
# of restarts                       =  0
# of nodes processed                =  16384 (209.095s)
# of strong branching evaluations   =  0 (0.000s)
# of function evaluations           =  0 (0.000s)
# of gradient evaluations           =  0 (0.000s)
# of hessian evaluations            =  0 (0.000s)
# of hessian-vector evaluations     =  0
# of subproblems processed          =  16637 (209.781s)
Total program time (secs)           =  26.75425 (213.134 CPU time)
Time spent in evaluations (secs)    =  0.00000

Cuts statistics (gen / add)
---------------------------
Knapsack cuts                       =  0 / 0
Mixed-integer rounding cuts         =  0 / 0
Flow-cover cuts                     =  0 / 0
Probing cuts                        =  0 / 0

Heuristics statistics (calls / successes / time)
------------------------------------------------
Feasibility pump                    =  2 / 1 / 0.054s
Rounding heuristic                  =  235 / 11 / 0.635s
MPEC heuristic                      =  0 / 0 / 0.000s
Local search heuristic              =  13 / 6 / 0.083s

===========================================================================

WARNING: Loading a SolverResults object with a warning status into
model.name="unknown";
    - termination condition: maxIterations
    - message from solver: Knitro 16.0.0\x3a MIP\x3a Node limit reached.
      Integer feasible point found.; objective 353513.36357420636; optimality
      gap Infinity; 16384 nodes; 16637 subproblem solves
Artelys Knitro 16.0.0: mip_multistart=1
mip_maxnodes=16384

=======================================
          Commercial License
         Artelys Knitro 16.0.0
=======================================

Knitro changing mip_method from AUTO to 1.
No start point provided -- Knitro computing one.

Knitro presolve eliminated 0 variables (0%) and 0 constraints (0%) in 0.00s.

concurrent_evals         0
datacheck                0
feastol                  1e-06
feastol_abs              1e-06
findiff_numthreads       1
hessian_no_f             1
hessopt                  1
mip_maxnodes             16384
mip_multistart           1
opttol                   1e-06
opttol_abs               0.001
Knitro changing mip_root_nlpalg from AUTO to 1.
Knitro changing mip_node_nlpalg from AUTO to 1.
Knitro changing mip_branchrule from AUTO to 2.
Knitro changing mip_selectrule from AUTO to 2.
Knitro changing mip_mir from AUTO to 2.
Knitro changing mip_clique from AUTO to 0.
Knitro changing mip_zerohalf from AUTO to 0.
Knitro changing mip_liftproject from AUTO to 0.
Knitro changing mip_knapsack from AUTO to 2.
Knitro changing mip_gomory from AUTO to 0.
Knitro changing mip_cut_flowcover from AUTO to 2.
Knitro changing mip_cut_probing from AUTO to 1.
Knitro changing mip_rounding from AUTO to 3.
Knitro changing mip_heuristic_strategy from AUTO to 1.
Knitro changing mip_heuristic_feaspump from AUTO to 1.
Knitro changing mip_heuristic_misqp from AUTO to 0.
Knitro changing mip_heuristic_mpec from AUTO to 1.
Knitro changing mip_heuristic_diving from AUTO to 1926.
Knitro changing mip_heuristic_fixpropagate from AUTO to 62.
Knitro changing mip_heuristic_lns from AUTO to 0.
Knitro changing mip_heuristic_localsearch from AUTO to 1.
Knitro changing mip_pseudoinit from AUTO to 1.

Problem Characteristics                     |           Presolved
-----------------------
Problem type: MIQCQP
Objective: maximize / quadratic
Number of variables:                     27 |                            27
  bounds:         lower     upper     range |     lower     upper     range
                      0         0        27 |         0         0        27
                             free     fixed |                free     fixed
                                0         0 |                   0         0
                  cont.    binary   integer |     cont.    binary   integer
                     18         0         9 |        18         0         9
Number of constraints:                   72 |                            72
                    eq.     ineq.     range |       eq.     ineq.     range
  linear:             0        36         0 |         0        36         0
  quadratic:          0        36         0 |         0        36         0
Number of nonzeros:
              objective  Jacobian   Hessian | objective  Jacobian   Hessian
  linear:             9        72           |         9        72          
  quadratic:          9       216       135 |         9       216       135
  total:              9       288       135 |         9       288       135

Knitro using Branch and Bound method with 8 threads.

Initial points
--------------
No initial point provided for the root node relaxation.
No primal point provided for the MIP.

Coefficient range:
  linear objective:          [2e+04, 2e+04] |                [3e+01, 3e+01]
  linear constraints:        [1e+00, 2e+01] |                [1e+00, 2e+01]
  quadratic objective:       [1e+04, 1e+04] |                [2e+01, 2e+01]
  quadratic constraints:     [1e+00, 8e+02] |                [2e-02, 2e+01]
  variable bounds:           [3e+00, 9e+02] |                [3e+00, 9e+02]
  constraint bounds:         [4e+02, 9e+02] |                [4e+02, 9e+02]

Root node relaxation
--------------------

 Iter      Objective      Feasibility        Optimality       Time 
                             error              error        (secs)
 ----      ---------      -----------        ----------      ------
    0   -1.64077e+06          14401.0          0.209474       0.035
    1   -2.18631e+06          4169.00          0.972220       0.036
    2   -2.29768e+06          1085.58           2.17634       0.036
    3   -2.30019e+06          332.058           2.54598       0.036
    4   -2.29609e+06          208.243           2.66660       0.037
    5   -2.29362e+06          154.106           2.71494       0.037
    6   -2.29202e+06          129.462           2.74536       0.037
    7   -2.29101e+06          114.596           2.76314       0.038
    8   -2.29033e+06          94.6734           2.77424       0.038
    9   -2.29020e+06          58.7190           2.77658       0.038
   10   -2.29405e+06          74.2433           2.71926       0.039
   11   -2.29449e+06          58.6296           2.71225       0.039
   12   -2.29534e+06          41.7538           2.69742       0.039
   13   -2.29655e+06          2.67403           2.67403       0.040
   14   -2.29757e+06          9.85655           2.65300       0.040
   15   -2.29832e+06          14.5454           2.63608       0.041
   16   -2.29907e+06          18.9549           2.61714       0.041
   17   -2.29986e+06          19.1783           2.59476       0.041
   18   -2.30040e+06          18.9224           2.57703       0.042
   19   -2.30103e+06          68.2573           2.55290       0.044
   20   -2.30138e+06          40.6419           2.53644       0.045
   30   -2.27459e+06          1.94848           25.0990       0.048
   40   -2.21166e+06          1.65880           40.6006       0.051
   50   -1.16443e+06      1.69438e-02           7.01353       0.055
   60       -292557.      0.00000e+00           7.57059       0.058
   70       -92475.1      0.00000e+00           13.7865       0.061

Tree search
-----------

       Nodes        Best solution   Best bound      Gap       Time 
   Expl  |  Unexpl      value         value                  (secs)
   ---------------  -------------   ----------      ---      ------
      1       2     -204634. FCRD          inf                0.066

Knitro deduced that the problem is non-convex.

      3       4     -130114.   FP          inf                0.085
     15      16     -9778.33 FCRD          inf                0.112
     22      23      271197. FCRD          inf                0.130
    111      71      317011. FCRD          inf                0.264
    271     134      322811. FCRD          inf                0.455
   7227     484      322811.               inf               15.300
  14604     686      322811.               inf               30.464
  16388     719      322811.               inf               34.113

EXIT: Node limit reached. Integer feasible point found.

Final Statistics for MIP
------------------------
Final objective value               =  3.22810693957703654e+05
Final bound value                   =  +inf
Final optimality gap (abs / rel)    =  inf / inf
# of root cutting plane rounds      =  1
# of restarts                       =  0
# of nodes processed                =  16388 (267.721s)
# of strong branching evaluations   =  0 (0.000s)
# of function evaluations           =  0 (0.000s)
# of gradient evaluations           =  0 (0.000s)
# of hessian evaluations            =  0 (0.000s)
# of hessian-vector evaluations     =  0
# of subproblems processed          =  16690 (268.502s)
Total program time (secs)           =  34.11502 (272.084 CPU time)
Time spent in evaluations (secs)    =  0.00000

Cuts statistics (gen / add)
---------------------------
Knapsack cuts                       =  0 / 0
Mixed-integer rounding cuts         =  0 / 0
Flow-cover cuts                     =  0 / 0
Probing cuts                        =  0 / 0

Heuristics statistics (calls / successes / time)
------------------------------------------------
Feasibility pump                    =  1 / 1 / 0.004s
Rounding heuristic                  =  298 / 14 / 0.817s
MPEC heuristic                      =  0 / 0 / 0.000s
Local search heuristic              =  12 / 5 / 0.095s

===========================================================================

WARNING: Loading a SolverResults object with a warning status into
model.name="unknown";
    - termination condition: maxIterations
    - message from solver: Knitro 16.0.0\x3a MIP\x3a Node limit reached.
      Integer feasible point found.; objective 322810.69395770365; optimality
      gap Infinity; 16388 nodes; 16690 subproblem solves
Artelys Knitro 16.0.0: mip_multistart=1
mip_maxnodes=16384

=======================================
          Commercial License
         Artelys Knitro 16.0.0
=======================================

Knitro changing mip_method from AUTO to 1.
No start point provided -- Knitro computing one.

Knitro presolve eliminated 0 variables (0%) and 0 constraints (0%) in 0.00s.

concurrent_evals         0
datacheck                0
feastol                  1e-06
feastol_abs              1e-06
findiff_numthreads       1
hessian_no_f             1
hessopt                  1
mip_maxnodes             16384
mip_multistart           1
opttol                   1e-06
opttol_abs               0.001
Knitro changing mip_root_nlpalg from AUTO to 1.
Knitro changing mip_node_nlpalg from AUTO to 1.
Knitro changing mip_branchrule from AUTO to 2.
Knitro changing mip_selectrule from AUTO to 2.
Knitro changing mip_mir from AUTO to 2.
Knitro changing mip_clique from AUTO to 0.
Knitro changing mip_zerohalf from AUTO to 0.
Knitro changing mip_liftproject from AUTO to 0.
Knitro changing mip_knapsack from AUTO to 2.
Knitro changing mip_gomory from AUTO to 0.
Knitro changing mip_cut_flowcover from AUTO to 2.
Knitro changing mip_cut_probing from AUTO to 1.
Knitro changing mip_rounding from AUTO to 3.
Knitro changing mip_heuristic_strategy from AUTO to 1.
Knitro changing mip_heuristic_feaspump from AUTO to 1.
Knitro changing mip_heuristic_misqp from AUTO to 0.
Knitro changing mip_heuristic_mpec from AUTO to 1.
Knitro changing mip_heuristic_diving from AUTO to 1926.
Knitro changing mip_heuristic_fixpropagate from AUTO to 62.
Knitro changing mip_heuristic_lns from AUTO to 0.
Knitro changing mip_heuristic_localsearch from AUTO to 1.
Knitro changing mip_pseudoinit from AUTO to 1.

Problem Characteristics                     |           Presolved
-----------------------
Problem type: MIQCQP
Objective: maximize / quadratic
Number of variables:                     30 |                            30
  bounds:         lower     upper     range |     lower     upper     range
                      0         0        30 |         0         0        30
                             free     fixed |                free     fixed
                                0         0 |                   0         0
                  cont.    binary   integer |     cont.    binary   integer
                     20         0        10 |        20         0        10
Number of constraints:                   85 |                            85
                    eq.     ineq.     range |       eq.     ineq.     range
  linear:             0        40         0 |         0        40         0
  quadratic:          0        45         0 |         0        45         0
Number of nonzeros:
              objective  Jacobian   Hessian | objective  Jacobian   Hessian
  linear:            10        80           |        10        80          
  quadratic:         10       270       165 |        10       270       165
  total:             10       350       165 |        10       350       165

Knitro using Branch and Bound method with 8 threads.

Initial points
--------------
No initial point provided for the root node relaxation.
No primal point provided for the MIP.

Coefficient range:
  linear objective:          [2e+04, 2e+04] |                [3e+01, 3e+01]
  linear constraints:        [1e+00, 2e+01] |                [1e+00, 2e+01]
  quadratic objective:       [1e+04, 1e+04] |                [2e+01, 2e+01]
  quadratic constraints:     [1e+00, 8e+02] |                [2e-02, 2e+01]
  variable bounds:           [3e+00, 9e+02] |                [3e+00, 9e+02]
  constraint bounds:         [4e+02, 9e+02] |                [4e+02, 9e+02]

Root node relaxation
--------------------

 Iter      Objective      Feasibility        Optimality       Time 
                             error              error        (secs)
 ----      ---------      -----------        ----------      ------
    0   -1.59985e+06          14401.0          0.237159       0.072
    1   -2.20600e+06          4169.18          0.947036       0.072
    2   -2.32986e+06          1080.05           2.17851       0.073
    3   -2.33210e+06          320.093           2.55558       0.073
    4   -2.32617e+06          247.255           2.69173       0.074
    5   -2.32286e+06          210.928           2.74728       0.074
    6   -2.32054e+06          189.619           2.77817       0.074
    7   -2.31899e+06          171.477           2.79361       0.075
    8   -2.31814e+06          154.914           2.79851       0.075
    9   -2.31782e+06          130.244           2.79963       0.076
   10   -2.31802e+06          115.010           2.79937       0.076
   11   -2.31920e+06          120.375           2.78645       0.076
   12   -2.31894e+06          103.102           2.79148       0.077
   13   -2.31914e+06          93.7453           2.79123       0.077
   14   -2.31954e+06          85.7147           2.78857       0.078
   15   -2.32020e+06          77.5530           2.78276       0.078
   16   -2.32126e+06          70.6128           2.77192       0.078
   17   -2.32234e+06          63.0897           2.76009       0.079
   18   -2.32347e+06          57.5711           2.74661       0.079
   19   -2.32484e+06          51.8753           2.72906       0.080
   20   -2.32658e+06          49.5184           2.70419       0.080
   30   -2.33494e+06          17.9013           2.49491       0.084
   40   -1.85422e+06         0.465946           72.0767       0.089
   50       -343240.      0.00000e+00           8.51260       0.094
   60       -5174.53      0.00000e+00           6.30000       0.097
   70        83941.5      0.00000e+00           2.69830       0.100
   80        107140.      1.45519e-11       9.46702e-13       0.103

Tree search
-----------

       Nodes        Best solution   Best bound      Gap       Time 
   Expl  |  Unexpl      value         value                  (secs)
   ---------------  -------------   ----------      ---      ------
      1       2      59846.6 FCRD          inf                0.106

Knitro deduced that the problem is non-convex.

     23      24      76954.6 FCRD          inf                0.208
     38      39      102761. FCRD          inf                0.238
     46      47      160174. FCRD          inf                0.251
    108     100      208888. FCRD          inf                0.359
    147     135      208888. FCRD          inf                0.413
    171     152      208888. FCRD          inf                0.445
    233     202      231795. FCRD          inf                0.531
   4786     609      260502. FCRD          inf               13.479
   6730     614      260502.               inf               19.545
  12628     967      312116. FCRD          inf               35.551
  13936     998      312116.               inf               38.749
  16391    1045      312116.               inf               44.749

EXIT: Node limit reached. Integer feasible point found.

Final Statistics for MIP
------------------------
Final objective value               =  3.12115584394109435e+05
Final bound value                   =  +inf
Final optimality gap (abs / rel)    =  inf / inf
# of root cutting plane rounds      =  1
# of restarts                       =  0
# of nodes processed                =  16391 (352.012s)
# of strong branching evaluations   =  0 (0.000s)
# of function evaluations           =  0 (0.000s)
# of gradient evaluations           =  0 (0.000s)
# of hessian evaluations            =  0 (0.000s)
# of hessian-vector evaluations     =  0
# of subproblems processed          =  16805 (353.116s)
Total program time (secs)           =  44.75274 (356.865 CPU time)
Time spent in evaluations (secs)    =  0.00000

Cuts statistics (gen / add)
---------------------------
Knapsack cuts                       =  0 / 0
Mixed-integer rounding cuts         =  0 / 0
Flow-cover cuts                     =  0 / 0
Probing cuts                        =  0 / 0

Heuristics statistics (calls / successes / time)
------------------------------------------------
Feasibility pump                    =  3 / 1 / 0.071s
Rounding heuristic                  =  400 / 16 / 1.087s
MPEC heuristic                      =  0 / 0 / 0.000s
Local search heuristic              =  16 / 5 / 0.137s

===========================================================================

WARNING: Loading a SolverResults object with a warning status into
model.name="unknown";
    - termination condition: maxIterations
    - message from solver: Knitro 16.0.0\x3a MIP\x3a Node limit reached.
      Integer feasible point found.; objective 312115.58439410944; optimality
      gap Infinity; 16391 nodes; 16805 subproblem solves
Artelys Knitro 16.0.0: mip_multistart=1
mip_maxnodes=16384

=======================================
          Commercial License
         Artelys Knitro 16.0.0
=======================================

Knitro changing mip_method from AUTO to 1.
No start point provided -- Knitro computing one.

Knitro presolve eliminated 0 variables (0%) and 0 constraints (0%) in 0.00s.

concurrent_evals         0
datacheck                0
feastol                  1e-06
feastol_abs              1e-06
findiff_numthreads       1
hessian_no_f             1
hessopt                  1
mip_maxnodes             16384
mip_multistart           1
opttol                   1e-06
opttol_abs               0.001
Knitro changing mip_root_nlpalg from AUTO to 1.
Knitro changing mip_node_nlpalg from AUTO to 1.
Knitro changing mip_branchrule from AUTO to 2.
Knitro changing mip_selectrule from AUTO to 2.
Knitro changing mip_mir from AUTO to 2.
Knitro changing mip_clique from AUTO to 0.
Knitro changing mip_zerohalf from AUTO to 0.
Knitro changing mip_liftproject from AUTO to 0.
Knitro changing mip_knapsack from AUTO to 2.
Knitro changing mip_gomory from AUTO to 0.
Knitro changing mip_cut_flowcover from AUTO to 2.
Knitro changing mip_cut_probing from AUTO to 1.
Knitro changing mip_rounding from AUTO to 3.
Knitro changing mip_heuristic_strategy from AUTO to 1.
Knitro changing mip_heuristic_feaspump from AUTO to 1.
Knitro changing mip_heuristic_misqp from AUTO to 0.
Knitro changing mip_heuristic_mpec from AUTO to 1.
Knitro changing mip_heuristic_diving from AUTO to 1926.
Knitro changing mip_heuristic_fixpropagate from AUTO to 62.
Knitro changing mip_heuristic_lns from AUTO to 0.
Knitro changing mip_heuristic_localsearch from AUTO to 1.
Knitro changing mip_pseudoinit from AUTO to 1.

Problem Characteristics                     |           Presolved
-----------------------
Problem type: MIQCQP
Objective: maximize / quadratic
Number of variables:                     33 |                            33
  bounds:         lower     upper     range |     lower     upper     range
                      0         0        33 |         0         0        33
                             free     fixed |                free     fixed
                                0         0 |                   0         0
                  cont.    binary   integer |     cont.    binary   integer
                     22         0        11 |        22         0        11
Number of constraints:                   99 |                            99
                    eq.     ineq.     range |       eq.     ineq.     range
  linear:             0        44         0 |         0        44         0
  quadratic:          0        55         0 |         0        55         0
Number of nonzeros:
              objective  Jacobian   Hessian | objective  Jacobian   Hessian
  linear:            11        88           |        11        88          
  quadratic:         11       330       198 |        11       330       198
  total:             11       418       198 |        11       418       198

Knitro using Branch and Bound method with 8 threads.

Initial points
--------------
No initial point provided for the root node relaxation.
No primal point provided for the MIP.

Coefficient range:
  linear objective:          [2e+04, 2e+04] |                [3e+01, 3e+01]
  linear constraints:        [1e+00, 2e+01] |                [1e+00, 2e+01]
  quadratic objective:       [1e+04, 1e+04] |                [2e+01, 2e+01]
  quadratic constraints:     [1e+00, 8e+02] |                [2e-02, 2e+01]
  variable bounds:           [3e+00, 9e+02] |                [3e+00, 9e+02]
  constraint bounds:         [4e+02, 9e+02] |                [4e+02, 9e+02]

Root node relaxation
--------------------

 Iter      Objective      Feasibility        Optimality       Time 
                             error              error        (secs)
 ----      ---------      -----------        ----------      ------
    0   -1.55892e+06          14401.0          0.184312       0.044
    1   -2.22568e+06          4169.14           1.24444       0.044
    2   -2.36204e+06          1075.25           2.18026       0.045
    3   -2.36435e+06          316.479           2.55796       0.045
    4   -2.35903e+06          195.818           2.68101       0.045
    5   -2.35599e+06          157.615           2.72959       0.046
    6   -2.35425e+06          127.053           2.75960       0.046
    7   -2.35352e+06          96.8355           2.77302       0.047
    8   -2.35371e+06          57.8037           2.77449       0.047
    9   -2.35922e+06          105.574           2.70194       0.048
   10   -2.35970e+06          76.7210           2.69532       0.048
   11   -2.36024e+06          5.71021           2.68824       0.048
   12   -2.36218e+06          2.65386           2.65386       0.049
   13   -2.36683e+06          2.51510           4.55570       0.049
   14   -2.35529e+06          2.48982           34.7539       0.050
   15   -2.35419e+06          21.2098           5.68532       0.050
   16   -2.35044e+06          29.0164           4.85545       0.051
   17   -2.34107e+06          61.5293           2.53126       0.051
   18   -2.32874e+06          47.4339           2.70344       0.051
   19   -2.29618e+06          31.7195           3.99136       0.052
   20   -2.23371e+06          31.6614           5.45247       0.052
   30   -2.15081e+06          1.21544           61.5441       0.059
   40   -1.78506e+06         0.372527           85.7464       0.063
   50   -1.14209e+06      0.00000e+00           8.44370       0.068
   60       -260542.      0.00000e+00           5.74022       0.071
   70       -152791.      0.00000e+00          0.443641       0.075

Tree search
-----------

       Nodes        Best solution   Best bound      Gap       Time 
   Expl  |  Unexpl      value         value                  (secs)
   ---------------  -------------   ----------      ---      ------
      1       2     -223125. FCRD          inf                0.082

Knitro deduced that the problem is non-convex.

      3       4     -131496. FCRD          inf                0.125
      7       8     -102790.   LS          inf                0.151
     35      36      46251.9 FCRD          inf                0.241
     60      58      169487. FCRD          inf                0.296
    217     180      175286. FCRD          inf                0.691
    225     185      201093. FCRD          inf                0.707
    610     322      224000. FCRD          inf                1.573
   1402     506      249807. FCRD          inf                3.416
   1416     511      252706. FCRD          inf                3.446
   5991     750      252706. FCRD          inf               18.750
   6762     769      252706.               inf               21.444
   7258     805      252706. FCRD          inf               23.047
  13699    1042      252706.               inf               43.716
  16384    1145      252706.               inf               52.164

EXIT: Node limit reached. Integer feasible point found.

Final Statistics for MIP
------------------------
Final objective value               =  2.52706465134647675e+05
Final bound value                   =  +inf
Final optimality gap (abs / rel)    =  inf / inf
# of root cutting plane rounds      =  1
# of restarts                       =  0
# of nodes processed                =  16384 (410.581s)
# of strong branching evaluations   =  0 (0.000s)
# of function evaluations           =  0 (0.000s)
# of gradient evaluations           =  0 (0.000s)
# of hessian evaluations            =  0 (0.000s)
# of hessian-vector evaluations     =  0
# of subproblems processed          =  16771 (411.805s)
Total program time (secs)           =  52.16780 (416.189 CPU time)
Time spent in evaluations (secs)    =  0.00000

Cuts statistics (gen / add)
---------------------------
Knapsack cuts                       =  0 / 0
Mixed-integer rounding cuts         =  0 / 0
Flow-cover cuts                     =  0 / 0
Probing cuts                        =  0 / 0

Heuristics statistics (calls / successes / time)
------------------------------------------------
Feasibility pump                    =  1 / 0 / 0.057s
Rounding heuristic                  =  376 / 17 / 1.187s
MPEC heuristic                      =  0 / 0 / 0.000s
Local search heuristic              =  18 / 6 / 0.191s

===========================================================================

WARNING: Loading a SolverResults object with a warning status into
model.name="unknown";
    - termination condition: maxIterations
    - message from solver: Knitro 16.0.0\x3a MIP\x3a Node limit reached.
      Integer feasible point found.; objective 252706.46513464767; optimality
      gap Infinity; 16384 nodes; 16771 subproblem solves
Artelys Knitro 16.0.0: mip_multistart=1
mip_maxnodes=16384

=======================================
          Commercial License
         Artelys Knitro 16.0.0
=======================================

Knitro changing mip_method from AUTO to 1.
No start point provided -- Knitro computing one.

Knitro presolve eliminated 0 variables (0%) and 0 constraints (0%) in 0.00s.

concurrent_evals         0
datacheck                0
feastol                  1e-06
feastol_abs              1e-06
findiff_numthreads       1
hessian_no_f             1
hessopt                  1
mip_maxnodes             16384
mip_multistart           1
opttol                   1e-06
opttol_abs               0.001
Knitro changing mip_root_nlpalg from AUTO to 1.
Knitro changing mip_node_nlpalg from AUTO to 1.
Knitro changing mip_branchrule from AUTO to 2.
Knitro changing mip_selectrule from AUTO to 2.
Knitro changing mip_mir from AUTO to 2.
Knitro changing mip_clique from AUTO to 0.
Knitro changing mip_zerohalf from AUTO to 0.
Knitro changing mip_liftproject from AUTO to 0.
Knitro changing mip_knapsack from AUTO to 2.
Knitro changing mip_gomory from AUTO to 0.
Knitro changing mip_cut_flowcover from AUTO to 2.
Knitro changing mip_cut_probing from AUTO to 1.
Knitro changing mip_rounding from AUTO to 3.
Knitro changing mip_heuristic_strategy from AUTO to 1.
Knitro changing mip_heuristic_feaspump from AUTO to 1.
Knitro changing mip_heuristic_misqp from AUTO to 0.
Knitro changing mip_heuristic_mpec from AUTO to 1.
Knitro changing mip_heuristic_diving from AUTO to 1926.
Knitro changing mip_heuristic_fixpropagate from AUTO to 62.
Knitro changing mip_heuristic_lns from AUTO to 0.
Knitro changing mip_heuristic_localsearch from AUTO to 1.
Knitro changing mip_pseudoinit from AUTO to 1.

Problem Characteristics                     |           Presolved
-----------------------
Problem type: MIQCQP
Objective: maximize / quadratic
Number of variables:                     36 |                            36
  bounds:         lower     upper     range |     lower     upper     range
                      0         0        36 |         0         0        36
                             free     fixed |                free     fixed
                                0         0 |                   0         0
                  cont.    binary   integer |     cont.    binary   integer
                     24         0        12 |        24         0        12
Number of constraints:                  114 |                           114
                    eq.     ineq.     range |       eq.     ineq.     range
  linear:             0        48         0 |         0        48         0
  quadratic:          0        66         0 |         0        66         0
Number of nonzeros:
              objective  Jacobian   Hessian | objective  Jacobian   Hessian
  linear:            12        96           |        12        96          
  quadratic:         12       396       234 |        12       396       234
  total:             12       492       234 |        12       492       234

Knitro using Branch and Bound method with 8 threads.

Initial points
--------------
No initial point provided for the root node relaxation.
No primal point provided for the MIP.

Coefficient range:
  linear objective:          [2e+04, 2e+04] |                [3e+01, 3e+01]
  linear constraints:        [1e+00, 2e+01] |                [1e+00, 2e+01]
  quadratic objective:       [1e+04, 1e+04] |                [2e+01, 2e+01]
  quadratic constraints:     [1e+00, 8e+02] |                [2e-02, 2e+01]
  variable bounds:           [3e+00, 9e+02] |                [3e+00, 9e+02]
  constraint bounds:         [4e+02, 9e+02] |                [4e+02, 9e+02]

Root node relaxation
--------------------

 Iter      Objective      Feasibility        Optimality       Time 
                             error              error        (secs)
 ----      ---------      -----------        ----------      ------
    0   -1.51800e+06          14401.0          0.173121       0.023
    1   -2.24537e+06          4169.21          0.909667       0.024
    2   -2.39422e+06          1071.62           2.18168       0.024
    3   -2.39643e+06          312.026           2.56144       0.025
    4   -2.39125e+06          218.641           2.68525       0.026
    5   -2.38771e+06          175.826           2.73442       0.026
    6   -2.38589e+06          150.937           2.75803       0.027
    7   -2.38474e+06          130.566           2.76823       0.027
    8   -2.38390e+06          114.545           2.77471       0.028
    9   -2.38326e+06          102.220           2.78188       0.028
   10   -2.38316e+06          91.6032           2.78313       0.029
   11   -2.38388e+06          95.5451           2.77599       0.029
   12   -2.38371e+06          85.8699           2.77754       0.030
   13   -2.38376e+06          77.1747           2.77662       0.031
   14   -2.38383e+06          69.3538           2.77515       0.031
   15   -2.38403e+06          62.3258           2.77216       0.032
   16   -2.38433e+06          56.6964           2.76791       0.032
   17   -2.38480e+06          51.6220           2.76186       0.033
   18   -2.38547e+06          47.2041           2.75444       0.034
   19   -2.38752e+06          48.7163           2.73194       0.037
   20   -2.38905e+06          17.6810           2.71391       0.038
   30   -2.38111e+06          8.95845           6.32155       0.044
   40   -2.32117e+06          2.10445           93.9809       0.051
   50   -2.34003e+06          1.81585           34.9506       0.056
   60   -2.15105e+06          1.14059           54.6783       0.060
   70   -1.19408e+06      0.00000e+00           8.04973       0.065
   80       -353016.      0.00000e+00          0.126411       0.069

Tree search
-----------

       Nodes        Best solution   Best bound      Gap       Time 
   Expl  |  Unexpl      value         value                  (secs)
   ---------------  -------------   ----------      ---      ------
      1       2     -434475. FCRD          inf                0.074

Knitro deduced that the problem is non-convex.

      2       3      38456.4 FCRD          inf                0.092
    153     127      64263.2 FCRD          inf                0.624
    279     236      138784. FCRD          inf                0.963
   2971     772      141684. FCRD          inf               10.153
   6974     795      141684.               inf               28.277
   9090     848      167491. FCRD          inf               37.567
  14213    1095      167491.               inf               59.926
  16388    1184      167491.               inf               68.972

EXIT: Node limit reached. Integer feasible point found.

Final Statistics for MIP
------------------------
Final objective value               =  1.67490526095575653e+05
Final bound value                   =  +inf
Final optimality gap (abs / rel)    =  inf / inf
# of root cutting plane rounds      =  1
# of restarts                       =  0
# of nodes processed                =  16388 (544.554s)
# of strong branching evaluations   =  0 (0.000s)
# of function evaluations           =  0 (0.000s)
# of gradient evaluations           =  0 (0.000s)
# of hessian evaluations            =  0 (0.000s)
# of hessian-vector evaluations     =  0
# of subproblems processed          =  16844 (545.934s)
Total program time (secs)           =  68.97519 (550.689 CPU time)
Time spent in evaluations (secs)    =  0.00000

Cuts statistics (gen / add)
---------------------------
Knapsack cuts                       =  0 / 0
Mixed-integer rounding cuts         =  0 / 0
Flow-cover cuts                     =  0 / 0
Probing cuts                        =  0 / 0

Heuristics statistics (calls / successes / time)
------------------------------------------------
Feasibility pump                    =  4 / 0 / 0.142s
Rounding heuristic                  =  435 / 11 / 1.305s
MPEC heuristic                      =  0 / 0 / 0.000s
Local search heuristic              =  12 / 4 / 0.163s

===========================================================================

WARNING: Loading a SolverResults object with a warning status into
model.name="unknown";
    - termination condition: maxIterations
    - message from solver: Knitro 16.0.0\x3a MIP\x3a Node limit reached.
      Integer feasible point found.; objective 167490.52609557565; optimality
      gap Infinity; 16388 nodes; 16844 subproblem solves
Artelys Knitro 16.0.0: mip_multistart=1
mip_maxnodes=16384

=======================================
          Commercial License
         Artelys Knitro 16.0.0
=======================================

Knitro changing mip_method from AUTO to 1.
No start point provided -- Knitro computing one.

Knitro presolve eliminated 0 variables (0%) and 0 constraints (0%) in 0.00s.

concurrent_evals         0
datacheck                0
feastol                  1e-06
feastol_abs              1e-06
findiff_numthreads       1
hessian_no_f             1
hessopt                  1
mip_maxnodes             16384
mip_multistart           1
opttol                   1e-06
opttol_abs               0.001
Knitro changing mip_root_nlpalg from AUTO to 1.
Knitro changing mip_node_nlpalg from AUTO to 1.
Knitro changing mip_branchrule from AUTO to 2.
Knitro changing mip_selectrule from AUTO to 2.
Knitro changing mip_mir from AUTO to 2.
Knitro changing mip_clique from AUTO to 0.
Knitro changing mip_zerohalf from AUTO to 0.
Knitro changing mip_liftproject from AUTO to 0.
Knitro changing mip_knapsack from AUTO to 2.
Knitro changing mip_gomory from AUTO to 0.
Knitro changing mip_cut_flowcover from AUTO to 2.
Knitro changing mip_cut_probing from AUTO to 1.
Knitro changing mip_rounding from AUTO to 3.
Knitro changing mip_heuristic_strategy from AUTO to 1.
Knitro changing mip_heuristic_feaspump from AUTO to 1.
Knitro changing mip_heuristic_misqp from AUTO to 0.
Knitro changing mip_heuristic_mpec from AUTO to 1.
Knitro changing mip_heuristic_diving from AUTO to 1926.
Knitro changing mip_heuristic_fixpropagate from AUTO to 62.
Knitro changing mip_heuristic_lns from AUTO to 0.
Knitro changing mip_heuristic_localsearch from AUTO to 1.
Knitro changing mip_pseudoinit from AUTO to 1.

Problem Characteristics                     |           Presolved
-----------------------
Problem type: MIQCQP
Objective: maximize / quadratic
Number of variables:                     39 |                            39
  bounds:         lower     upper     range |     lower     upper     range
                      0         0        39 |         0         0        39
                             free     fixed |                free     fixed
                                0         0 |                   0         0
                  cont.    binary   integer |     cont.    binary   integer
                     26         0        13 |        26         0        13
Number of constraints:                  130 |                           130
                    eq.     ineq.     range |       eq.     ineq.     range
  linear:             0        52         0 |         0        52         0
  quadratic:          0        78         0 |         0        78         0
Number of nonzeros:
              objective  Jacobian   Hessian | objective  Jacobian   Hessian
  linear:            13       104           |        13       104          
  quadratic:         13       468       273 |        13       468       273
  total:             13       572       273 |        13       572       273

Knitro using Branch and Bound method with 8 threads.

Initial points
--------------
No initial point provided for the root node relaxation.
No primal point provided for the MIP.

Coefficient range:
  linear objective:          [2e+04, 2e+04] |                [3e+01, 3e+01]
  linear constraints:        [1e+00, 2e+01] |                [1e+00, 2e+01]
  quadratic objective:       [1e+04, 1e+04] |                [2e+01, 2e+01]
  quadratic constraints:     [1e+00, 8e+02] |                [2e-02, 2e+01]
  variable bounds:           [3e+00, 9e+02] |                [3e+00, 9e+02]
  constraint bounds:         [4e+02, 9e+02] |                [4e+02, 9e+02]

Root node relaxation
--------------------

 Iter      Objective      Feasibility        Optimality       Time 
                             error              error        (secs)
 ----      ---------      -----------        ----------      ------
    0   -1.47707e+06          14401.0          0.166195       0.030
    1   -2.26506e+06          4169.30          0.965946       0.031
    2   -2.42640e+06          1068.55           2.18285       0.032
    3   -2.42851e+06          309.861           2.56371       0.032
    4   -2.42217e+06          211.140           2.69012       0.033
    5   -2.41793e+06          166.044           2.73688       0.033
    6   -2.41522e+06          139.636           2.76427       0.034
    7   -2.41337e+06          117.480           2.78109       0.035
    8   -2.41213e+06          106.345           2.79019       0.035
    9   -2.41134e+06          94.2232           2.79510       0.036
   10   -2.41056e+06          83.6854           2.80014       0.036
   11   -2.41154e+06          87.0391           2.79196       0.037
   12   -2.41177e+06          76.7426           2.79024       0.037
   13   -2.41281e+06          55.7265           2.78149       0.038
   14   -2.41456e+06          21.6990           2.76571       0.038
   15   -2.41862e+06          31.4924           2.72643       0.039
   16   -2.42001e+06          2.71057           2.71057       0.040
   17   -2.42249e+06          17.2079           2.68177       0.040
   18   -2.43024e+06          2.55984           2.55984       0.041
   19   -2.43265e+06          2.48224           2.48224       0.041
   20   -2.43284e+06          2.46570           3.19946       0.042
   30   -2.41618e+06          2.10380           16.9443       0.050
   40   -2.38005e+06          1.85691           26.5290       0.055
   50   -1.89258e+06          8.52838           76.1391       0.060
   60   -1.67016e+06         0.262945           89.7709       0.064
   70   -1.43632e+06          64.1767           25.8866       0.070
   80       -406908.      1.11210e-02           17.7552       0.075
   90       -298248.      0.00000e+00           2.07183       0.079
  100       -259616.      0.00000e+00           2.73540       0.084
  110       -229454.      0.00000e+00          0.210249       0.088
  120       -212184.      0.00000e+00          0.824945       0.093
  130       -39569.3      0.00000e+00           22.6505       0.098
  140       -1743.95      0.00000e+00           17.3926       0.103

Tree search
-----------

       Nodes        Best solution   Best bound      Gap       Time 
   Expl  |  Unexpl      value         value                  (secs)
   ---------------  -------------   ----------      ---      ------
      1       2     -121280. FCRD          inf                0.110

Knitro deduced that the problem is non-convex.

     31      32     -101273. FCRD          inf                0.300
     70      71     -98373.2 FCRD          inf                0.408
     70      71     -23852.3   LS          inf                0.425
    163     163      1954.50 FCRD          inf                0.657
    340     325      4854.13 FCRD          inf                1.073
    346     331      24861.7 FCRD          inf                1.095
    416     391      30660.9 FCRD          inf                1.265
    757     607      50668.5 FCRD          inf                2.237
    867     658      99382.5 FCRD          inf                2.571
   1042     713      108081. FCRD          inf                3.170
   7896     855      108081.               inf               40.451
   9264     938      108081. FCRD          inf               47.175
  15884    1009      108081.               inf               82.586
  16386    1032      108081.               inf               84.903

EXIT: Node limit reached. Integer feasible point found.

Final Statistics for MIP
------------------------
Final objective value               =  1.08081406836112961e+05
Final bound value                   =  +inf
Final optimality gap (abs / rel)    =  inf / inf
# of root cutting plane rounds      =  1
# of restarts                       =  0
# of nodes processed                =  16386 (671.536s)
# of strong branching evaluations   =  0 (0.000s)
# of function evaluations           =  0 (0.000s)
# of gradient evaluations           =  0 (0.000s)
# of hessian evaluations            =  0 (0.000s)
# of hessian-vector evaluations     =  0
# of subproblems processed          =  16780 (672.822s)
Total program time (secs)           =  84.90565 (677.740 CPU time)
Time spent in evaluations (secs)    =  0.00000

Cuts statistics (gen / add)
---------------------------
Knapsack cuts                       =  0 / 0
Mixed-integer rounding cuts         =  0 / 0
Flow-cover cuts                     =  0 / 0
Probing cuts                        =  0 / 0

Heuristics statistics (calls / successes / time)
------------------------------------------------
Feasibility pump                    =  3 / 1 / 0.138s
Rounding heuristic                  =  378 / 16 / 1.206s
MPEC heuristic                      =  0 / 0 / 0.000s
Local search heuristic              =  18 / 6 / 0.275s

===========================================================================

WARNING: Loading a SolverResults object with a warning status into
model.name="unknown";
    - termination condition: maxIterations
    - message from solver: Knitro 16.0.0\x3a MIP\x3a Node limit reached.
      Integer feasible point found.; objective 108081.40683611296; optimality
      gap Infinity; 16386 nodes; 16780 subproblem solves
Artelys Knitro 16.0.0: mip_multistart=1
mip_maxnodes=16384

=======================================
          Commercial License
         Artelys Knitro 16.0.0
=======================================

Knitro changing mip_method from AUTO to 1.
No start point provided -- Knitro computing one.

Knitro presolve eliminated 0 variables (0%) and 0 constraints (0%) in 0.00s.

concurrent_evals         0
datacheck                0
feastol                  1e-06
feastol_abs              1e-06
findiff_numthreads       1
hessian_no_f             1
hessopt                  1
mip_maxnodes             16384
mip_multistart           1
opttol                   1e-06
opttol_abs               0.001
Knitro changing mip_root_nlpalg from AUTO to 1.
Knitro changing mip_node_nlpalg from AUTO to 1.
Knitro changing mip_branchrule from AUTO to 2.
Knitro changing mip_selectrule from AUTO to 2.
Knitro changing mip_mir from AUTO to 2.
Knitro changing mip_clique from AUTO to 0.
Knitro changing mip_zerohalf from AUTO to 0.
Knitro changing mip_liftproject from AUTO to 0.
Knitro changing mip_knapsack from AUTO to 2.
Knitro changing mip_gomory from AUTO to 0.
Knitro changing mip_cut_flowcover from AUTO to 2.
Knitro changing mip_cut_probing from AUTO to 1.
Knitro changing mip_rounding from AUTO to 3.
Knitro changing mip_heuristic_strategy from AUTO to 1.
Knitro changing mip_heuristic_feaspump from AUTO to 1.
Knitro changing mip_heuristic_misqp from AUTO to 0.
Knitro changing mip_heuristic_mpec from AUTO to 1.
Knitro changing mip_heuristic_diving from AUTO to 1926.
Knitro changing mip_heuristic_fixpropagate from AUTO to 62.
Knitro changing mip_heuristic_lns from AUTO to 0.
Knitro changing mip_heuristic_localsearch from AUTO to 1.
Knitro changing mip_pseudoinit from AUTO to 1.

Problem Characteristics                     |           Presolved
-----------------------
Problem type: MIQCQP
Objective: maximize / quadratic
Number of variables:                     42 |                            42
  bounds:         lower     upper     range |     lower     upper     range
                      0         0        42 |         0         0        42
                             free     fixed |                free     fixed
                                0         0 |                   0         0
                  cont.    binary   integer |     cont.    binary   integer
                     28         0        14 |        28         0        14
Number of constraints:                  147 |                           147
                    eq.     ineq.     range |       eq.     ineq.     range
  linear:             0        56         0 |         0        56         0
  quadratic:          0        91         0 |         0        91         0
Number of nonzeros:
              objective  Jacobian   Hessian | objective  Jacobian   Hessian
  linear:            14       112           |        14       112          
  quadratic:         14       546       315 |        14       546       315
  total:             14       658       315 |        14       658       315

Knitro using Branch and Bound method with 8 threads.

Initial points
--------------
No initial point provided for the root node relaxation.
No primal point provided for the MIP.

Coefficient range:
  linear objective:          [2e+04, 2e+04] |                [3e+01, 3e+01]
  linear constraints:        [1e+00, 2e+01] |                [1e+00, 2e+01]
  quadratic objective:       [1e+04, 1e+04] |                [2e+01, 2e+01]
  quadratic constraints:     [1e+00, 8e+02] |                [2e-02, 2e+01]
  variable bounds:           [3e+00, 9e+02] |                [3e+00, 9e+02]
  constraint bounds:         [4e+02, 9e+02] |                [4e+02, 9e+02]

Root node relaxation
--------------------

 Iter      Objective      Feasibility        Optimality       Time 
                             error              error        (secs)
 ----      ---------      -----------        ----------      ------
    0   -1.43615e+06          14401.0          0.147938       0.020
    1   -2.28474e+06          4169.33          0.935687       0.021
    2   -2.45857e+06          1065.93           2.18384       0.021
    3   -2.46060e+06          302.345           2.56566       0.022
    4   -2.45284e+06          195.548           2.69730       0.023
    5   -2.44834e+06          150.776           2.74373       0.023
    6   -2.44555e+06          117.964           2.77136       0.024
    7   -2.44344e+06          104.265           2.78716       0.025
    8   -2.44230e+06          95.5991           2.79528       0.025
    9   -2.44128e+06          86.1724           2.80190       0.026
   10   -2.44082e+06          79.5361           2.80420       0.026
   11   -2.44162e+06          81.0669           2.79810       0.027
   12   -2.44169e+06          72.7681           2.79656       0.028
   13   -2.44211e+06          61.4529           2.79224       0.028
   14   -2.44307e+06          61.0703           2.78366       0.029
   15   -2.44389e+06          57.8645           2.77816       0.030
   16   -2.44459e+06          54.6550           2.77366       0.030
   17   -2.44738e+06          85.7540           2.74999       0.034
   18   -2.45079e+06          133.913           2.78977       0.035
   19   -2.45331e+06          153.460           3.19698       0.036
   20   -2.45604e+06          175.298           2.66331       0.036
   30   -2.46578e+06          281.448           3.56960       0.044
   40   -2.35207e+06          223.194           10.4373       0.051
   50   -2.17742e+06          1.15763           8.11516       0.058
   60   -1.70267e+06         0.353133           10.7827       0.063
   70   -1.48107e+06         0.259413           5.09665       0.069
   80   -1.09963e+06      2.92108e-02           16.2952       0.074
   90       -719284.          16.9179           8.32178       0.079
  100       -515044.      3.32305e-06           2.74269       0.084
  110       -261805.      0.00000e+00           6.33684       0.089
  120       -3411.72      0.00000e+00           1.26966       0.095
  130        78821.8      0.00000e+00          0.523474       0.100

Tree search
-----------

       Nodes        Best solution   Best bound      Gap       Time 
   Expl  |  Unexpl      value         value                  (secs)
   ---------------  -------------   ----------      ---      ------
      1       2     -83261.4 FCRD          inf                0.106

Knitro deduced that the problem is non-convex.

    127     128     -80361.8 FCRD          inf                0.542
    174     173     -31647.8 FCRD          inf                0.641
    403     382      45772.7 FCRD          inf                1.152
   7817     902      45772.7               inf               41.650
  13689    1134      68679.8 FCRD          inf               74.494
  15727    1143      68679.8               inf               86.380
  16386    1151      68679.8               inf               90.415

EXIT: Node limit reached. Integer feasible point found.

Final Statistics for MIP
------------------------
Final objective value               =  6.86798476295596920e+04
Final bound value                   =  +inf
Final optimality gap (abs / rel)    =  inf / inf
# of root cutting plane rounds      =  1
# of restarts                       =  0
# of nodes processed                =  16386 (715.405s)
# of strong branching evaluations   =  0 (0.000s)
# of function evaluations           =  0 (0.000s)
# of gradient evaluations           =  0 (0.000s)
# of hessian evaluations            =  0 (0.000s)
# of hessian-vector evaluations     =  0
# of subproblems processed          =  16793 (716.481s)
Total program time (secs)           =  90.41767 (721.780 CPU time)
Time spent in evaluations (secs)    =  0.00000

Cuts statistics (gen / add)
---------------------------
Knapsack cuts                       =  0 / 0
Mixed-integer rounding cuts         =  0 / 0
Flow-cover cuts                     =  0 / 0
Probing cuts                        =  0 / 0

Heuristics statistics (calls / successes / time)
------------------------------------------------
Feasibility pump                    =  2 / 0 / 0.120s
Rounding heuristic                  =  391 / 12 / 0.965s
MPEC heuristic                      =  0 / 0 / 0.000s
Local search heuristic              =  11 / 4 / 0.230s

===========================================================================

WARNING: Loading a SolverResults object with a warning status into
model.name="unknown";
    - termination condition: maxIterations
    - message from solver: Knitro 16.0.0\x3a MIP\x3a Node limit reached.
      Integer feasible point found.; objective 68679.84762955969; optimality
      gap Infinity; 16386 nodes; 16793 subproblem solves
report_counts(field, layouts)
        machines  segments   covered   net present value
--------------------------------------------------------
               3        24     59.6%              $5,678
               4        27     62.4%             $46,597
               5        32     67.7%            $159,137
               6        35     70.5%            $200,055
               7        40     75.8%            $312,595
  best         8        43     78.6%            $353,513
               9        44     78.9%            $322,811
              10        47     80.4%            $312,116
              11        49     80.4%            $252,706
              12        51     79.8%            $167,491
              13        53     79.8%            $108,081
              14        57     81.0%             $68,680

8 machines earn the most at $353,513
81.0% is the widest coverage, and it does not pay for itself
draw_comparison(field, layouts)
Investment value010020030034567891011121314Number of machines$000 net present value64715920031335432331225316710869Coverage of the field60708034567891011121314Number of machinesPercentage606268707679798080808081

The layouts behind those two curves, in order:

draw_layouts(field, layouts)
3 machines, $5,678, 59.6% covered8 segments, 160 m reach88 segments, 160 m reach88 segments, 160 m reach84 machines, $46,597, 62.4% covered3 segments, 60 m reach38 segments, 160 m reach88 segments, 160 m reach88 segments, 160 m reach85 machines, $159,137, 67.7% covered4 segments, 80 m reach45 segments, 100 m reach58 segments, 160 m reach88 segments, 160 m reach87 segments, 140 m reach76 machines, $200,055, 70.5% covered3 segments, 60 m reach34 segments, 80 m reach47 segments, 140 m reach78 segments, 160 m reach85 segments, 100 m reach58 segments, 160 m reach87 machines, $312,595, 75.8% covered4 segments, 80 m reach47 segments, 140 m reach75 segments, 100 m reach54 segments, 80 m reach47 segments, 140 m reach75 segments, 100 m reach58 segments, 160 m reach88 machines, $353,513, 78.6% covered3 segments, 60 m reach34 segments, 80 m reach45 segments, 100 m reach54 segments, 80 m reach47 segments, 140 m reach78 segments, 160 m reach87 segments, 140 m reach75 segments, 100 m reach59 machines, $322,811, 78.9% covered5 segments, 100 m reach54 segments, 80 m reach48 segments, 160 m reach83 segments, 60 m reach37 segments, 140 m reach73 segments, 60 m reach33 segments, 60 m reach33 segments, 60 m reach38 segments, 160 m reach810 machines, $312,116, 80.4% covered3 segments, 60 m reach33 segments, 60 m reach35 segments, 100 m reach53 segments, 60 m reach38 segments, 160 m reach83 segments, 60 m reach33 segments, 60 m reach38 segments, 160 m reach85 segments, 100 m reach56 segments, 120 m reach611 machines, $252,706, 80.4% covered3 segments, 60 m reach38 segments, 160 m reach83 segments, 60 m reach38 segments, 160 m reach83 segments, 60 m reach34 segments, 80 m reach43 segments, 60 m reach33 segments, 60 m reach36 segments, 120 m reach63 segments, 60 m reach35 segments, 100 m reach512 machines, $167,491, 79.8% covered3 segments, 60 m reach38 segments, 160 m reach84 segments, 80 m reach43 segments, 60 m reach35 segments, 100 m reach55 segments, 100 m reach53 segments, 60 m reach33 segments, 60 m reach33 segments, 60 m reach33 segments, 60 m reach33 segments, 60 m reach38 segments, 160 m reach813 machines, $108,081, 79.8% covered3 segments, 60 m reach33 segments, 60 m reach38 segments, 160 m reach83 segments, 60 m reach38 segments, 160 m reach83 segments, 60 m reach33 segments, 60 m reach33 segments, 60 m reach33 segments, 60 m reach34 segments, 80 m reach43 segments, 60 m reach34 segments, 80 m reach45 segments, 100 m reach514 machines, $68,680, 81.0% covered3 segments, 60 m reach38 segments, 160 m reach84 segments, 80 m reach45 segments, 100 m reach53 segments, 60 m reach33 segments, 60 m reach34 segments, 80 m reach43 segments, 60 m reach33 segments, 60 m reach33 segments, 60 m reach34 segments, 80 m reach43 segments, 60 m reach35 segments, 100 m reach56 segments, 120 m reach6

Conclusion

The best solution is the one with 8 machines.

Although cases with more than 8 machines cover a higher proportion of the field, they have increasingly higher initial and maintenance costs, so the extra machines are not worthwhile.

Note that, for some cases, it is possible to get higher objective function values by allowing machines with only 1 or 2 segments. But since machines with 1 or 2 segments make a loss, it doesn’t make sense to include them: removing those loss-making machines leads to solutions with fewer machines that are uniformly worse than the solutions we’ve found.

 

Solved with Artelys Knitro · artelys.com