Math::LP::Constraint - representation of constraints in Math::LP objects


Math-LP documentation Contained in the Math-LP distribution.

Index


Code Index:

NAME

Top

Math::LP::Constraint - representation of constraints in Math::LP objects

SYNOPSIS

Top

    use Math::LP::Constraints qw(:types); # imports constraint types

    # make the constraint x1 + 2 x2 <= 3
    $x1 = new Math::LP::Variable(name => 'x1');
    $x2 = new Math::LP::Variable(name => 'x2');
    $constraint = new Math::LP::Constraint(
	lhs  => make Math::LP::LinearCombination($x1,1.0,$x2,2.0),
        rhs  => 3.0,
        type => $LE,
    );

DESCRIPTION

Top

A Math::LP::Constraint object has the following fields:

lhs

a Math::LP::LinearCombination object forming the left hand side of the (in)equality (Required)

rhs

a constant number for the right hand side of the (in)equality (Defaults to 0)

type

the (in)equality type, either $LE (<=), $GE (>=) or $EQ (=) (Required)

name

a string with a name for the constraint (Optional, set by Math::LP::add_constraint if not specified)

row_index

the index of the constraint in the LP (Set by Math::LP::add_constraint)

slack

the slack of the row in the LP (Set after solving the LP)

dual_value

the dual value of the row in the LP (Set after solving the LP)

SEE ALSO

Top

Math::LP, Math::LP::Variable, Math::LP::LinearCombination and Math::LP::Object

AUTHOR

Top

Wim Verhaegen <wimv@cpan.org>

COPYRIGHT

Top


Math-LP documentation Contained in the Math-LP distribution.

package Math::LP::Constraint;
use strict;
use vars qw($LE $GE $EQ %SYMBOL @EXPORT %EXPORT_TAGS @EXPORT_OK);
use Math::LP::LinearCombination;
use Math::LP::Solve;
use Exporter;
use base qw(Math::LP::Object Exporter);
use fields (
    'lhs',         # Math::LP::LinearCombination at left hand side
    'rhs',         # constant number at right hand side
    'type',        # $LE, $GE or $EQ
    'name',        # name of the constraint
    'row_index',   # row index of the constraint in the LP
    'slack',       # slack found after solving the LP
    'dual_value',  # dual value for the constraint after solving the LP
);

# the constraint types are exportable
@EXPORT = qw();
%EXPORT_TAGS = (types => [qw($LE $GE $EQ)]);
@EXPORT_OK = qw($LE $GE $EQ);

BEGIN {
    # constraint types
    *LE = \$Math::LP::Solve::LE;
    *GE = \$Math::LP::Solve::GE;
    *EQ = \$Math::LP::Solve::EQ;
    
    # constraint symbols
    %SYMBOL = ($LE => '<=', $GE => '>=', $EQ => '=');
}

sub initialize {
    my Math::LP::Constraint $this = shift;
    defined($this->{lhs}) or 
	$this->croak("No lhs given for Math::LP::Constraint");
    $this->{rhs} ||= 0.0;
    defined($this->{type}) or
	$this->croak("No type given for Math::LP::Constraint");
    $this->{type} == $LE or $this->{type} == $GE or $this->{type} == $EQ
	or $this->croak("No valid type given for Math::LP::Constraint");
}

sub stringify {
    my Math::LP::Constraint $this = shift;
    my $str = '';
    $str .= $this->{lhs}->stringify() . ' ' . $this->symbol() . ' ' . $this->{rhs};
    $str .= ' [' . $this->{name} . ']' if defined $this->{name};
    return $str;
}

sub symbol {
    my Math::LP::Constraint $this = shift;
    my $type = $this->{type};
    return $SYMBOL{$type};
}

1;

__END__