| Math-LP documentation | Contained in the Math-LP distribution. |
Math::LP::Constraint - representation of constraints in Math::LP objects
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,
);
A Math::LP::Constraint object has the following fields:
a Math::LP::LinearCombination object forming the left hand side of the (in)equality (Required)
a constant number for the right hand side of the (in)equality (Defaults to 0)
the (in)equality type, either $LE (<=), $GE (>=) or $EQ (=) (Required)
a string with a name for the constraint (Optional, set by Math::LP::add_constraint if not specified)
the index of the constraint in the LP (Set by Math::LP::add_constraint)
the slack of the row in the LP (Set after solving the LP)
the dual value of the row in the LP (Set after solving the LP)
Wim Verhaegen <wimv@cpan.org>
Copyright(c) 2000-2001 Wim Verhaegen. All rights reserved. This program is free software; you can redistribute and/or modify it under the same terms as Perl itself.
| 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__