#  Copyright (c) 1997-2004
#  Ewgenij Gawrilow, Michael Joswig (Technische Universitaet Berlin, Germany)
#  http://www.math.tu-berlin.de/polymake,  mailto:polymake@math.tu-berlin.de
#
#  This program is free software; you can redistribute it and/or modify it
#  under the terms of the GNU General Public License as published by the
#  Free Software Foundation; either version 2, or (at your option) any
#  later version: http://www.gnu.org/licenses/gpl.txt.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#-----------------------------------------------------------------------------
#  $Project: polymake $$Id: lp_properties.rules,v 1.7 2004/11/10 10:59:53 gawrilow Exp $

object Polytope;

# category: Optimization
# Linear objective function.
#
property LINEAR_OBJECTIVE
$type="vector";


# category: Optimization
# Abstract objective function.
# The `i`-th element is the value of the objective function at vertex number `i`.
# Only defined for bounded polytopes.

property ABSTRACT_OBJECTIVE
$type="vector";
$apply_diff{VERTICES}=\&permute_elements;


# category: Optimization
# Indices of vertices at which the maximum of the objective function is attained.

property MAXIMAL_FACE
$type="set";
$apply_diff{VERTICES}=\&permute_cols;


# category: Optimization
# Similar to @see MAXIMAL_FACE.

property MINIMAL_FACE
$type="set";
$apply_diff{VERTICES}=\&permute_cols;


# category: Optimization
# Coordinates of a (possible not unique) vertex at which the maximum of the objective function is attained.

property MAXIMAL_VERTEX
$type="vector";


# category: Optimization
# Similar to @see MAXIMAL_VERTEX.

property MINIMAL_VERTEX
$type="vector";


# category: Optimization
# Maximum value of the objective function. Negated if linear problem is unbounded.

property MAXIMAL_VALUE
$type="scalar";


# category: Optimization
# Similar to @see MAXIMAL_VALUE.

property MINIMAL_VALUE
$type="scalar";


# category: Optimization
# Subgraph of @see GRAPH. Consists only of directed arcs along which the value of the objective function increases.

property DIRECTED_GRAPH
$type="graph";
$apply_diff{VERTICES}=\&permute_rows_cols;


# category: Optimization
# Number of outgoing arcs for each vertex in @see DIRECTED_GRAPH.

property VERTEX_OUT_DEGREES
$type="array<cardinal>";
$apply_diff{VERTICES}=\&permute_elements;


# category: Optimization
# Number of incoming arcs for each vertex in @see DIRECTED_GRAPH.

property VERTEX_IN_DEGREES
$type="array<cardinal>";
$apply_diff{VERTICES}=\&permute_elements;


# category: Optimization
# Approximate color encoding of objective function values.
# For each vertex, the color is chosen by linear interpolation in HSV system
# between fixed "maximal" and "minimal" colors, with the same ratio as the objective
# function value has in relation to the global maximum and mininum on the entire polytope.

property VERTEX_COLORS
$type="array<RGB>";
$apply_diff{VERTICES}=\&permute_rows;


# category: Optimization
# Expected average path length for a simplex algorithm employing "random edge" pivoting strategy.

property RANDOM_EDGE_EPL
$type="vector";


# category: Optimization
# You can give a list of variable names here
# (this amounts to naming the columns of the coordinate vectors for @see VERTICES).
# This is of not much use for polymake.  But this information will be
# used by programs which convert polymake format to other formats (such as LP).

property VARIABLE_NAMES
$type="array<label>";


package Visual::Color;

# distinguished color for MAX_FACE: red
custom $max="255 0 0";

# distinguished color for MIN_FACE: yellow
custom $min="255 255 0";


# Local Variables:
# mode: perl
# c-basic-offset:3
# End:
