Google OR-Tools v9.11
a fast and portable software suite for combinatorial optimization
Loading...
Searching...
No Matches
operations_research::sat::CompiledIntModConstraint Class Reference

#include <constraint_violation.h>

Inheritance diagram for operations_research::sat::CompiledIntModConstraint:
operations_research::sat::CompiledConstraintWithProto operations_research::sat::CompiledConstraint

Public Member Functions

 CompiledIntModConstraint (const ConstraintProto &ct_proto)
 --— CompiledIntModConstraint --—
 
 ~CompiledIntModConstraint () override=default
 
int64_t ComputeViolation (absl::Span< const int64_t > solution) override
 
- Public Member Functions inherited from operations_research::sat::CompiledConstraintWithProto
 CompiledConstraintWithProto (const ConstraintProto &ct_proto)
 --— CompiledConstraintWithProto --—
 
 ~CompiledConstraintWithProto () override=default
 
const ConstraintProto & ct_proto () const
 
std::vector< int > UsedVariables (const CpModelProto &model_proto) const final
 This just returns the variables used by the stored ct_proto_.
 
- Public Member Functions inherited from operations_research::sat::CompiledConstraint
 CompiledConstraint ()=default
 
virtual ~CompiledConstraint ()=default
 
void InitializeViolation (absl::Span< const int64_t > solution)
 Recomputes the violation of the constraint from scratch.
 
virtual void PerformMove (int var, int64_t old_value, absl::Span< const int64_t > solution_with_new_value)
 Updates the violation with the new value.
 
virtual int64_t ViolationDelta (int var, int64_t old_value, absl::Span< const int64_t > solution_with_new_value)
 Returns the delta if var changes from old_value to solution[var].
 
int64_t violation () const
 The cached violation of this constraint.
 

Additional Inherited Members

- Protected Member Functions inherited from operations_research::sat::CompiledConstraint
- Protected Attributes inherited from operations_research::sat::CompiledConstraint
int64_t violation_
 

Detailed Description

The violation of an int_mod constraint is defined as follow:

if target and expr0 have the same sign: min( abs(value(target) - (value(expr0) % value(expr1))), abs(value(target)) + abs((value(expr0) % value(expr1)) - value(expr1)), abs(value(expr0) % value(expr1)) + abs(value(target) - value(expr1)), )

if target and expr0 have different sign: abs(target) + abs(expr0)

Note
the modulo (expr1) is always fixed.

Definition at line 518 of file constraint_violation.h.

Constructor & Destructor Documentation

◆ CompiledIntModConstraint()

operations_research::sat::CompiledIntModConstraint::CompiledIntModConstraint ( const ConstraintProto & ct_proto)
explicit

--— CompiledIntModConstraint --—

Definition at line 1072 of file constraint_violation.cc.

◆ ~CompiledIntModConstraint()

operations_research::sat::CompiledIntModConstraint::~CompiledIntModConstraint ( )
overridedefault

Member Function Documentation

◆ ComputeViolation()

int64_t operations_research::sat::CompiledIntModConstraint::ComputeViolation ( absl::Span< const int64_t > solution)
overridevirtual

Computes the violation of a constraint.

This is called by InitializeViolation() and also the default implementation of ViolationDelta().

Note
The violation computation assumes the modulo is constant.

Easy case.

Different signs. We use the sum of the absolute value to have a better gradiant. We could also use the min of target_move and the expr_move.

Implements operations_research::sat::CompiledConstraint.

Definition at line 1076 of file constraint_violation.cc.


The documentation for this class was generated from the following files: