Example usage for org.apache.commons.math3.optim.linear LinearConstraint LinearConstraint

List of usage examples for org.apache.commons.math3.optim.linear LinearConstraint LinearConstraint

Introduction

In this page you can find the example usage for org.apache.commons.math3.optim.linear LinearConstraint LinearConstraint.

Prototype

public LinearConstraint(final RealVector lhsCoefficients, final double lhsConstant,
        final Relationship relationship, final RealVector rhsCoefficients, final double rhsConstant) 

Source Link

Document

Build a constraint involving two linear equations.

Usage

From source file:org.lightjason.agentspeak.action.buildin.math.linearprogram.CEquationConstraint.java

@Override
public final IFuzzyValue<Boolean> execute(final IContext p_context, final boolean p_parallel,
        final List<ITerm> p_argument, final List<ITerm> p_return, final List<ITerm> p_annotation) {
    final List<ITerm> l_arguments = CCommon.flatcollection(p_argument).collect(Collectors.toList());

    // first search the relation symbol and create splitting lists
    final int l_index = IntStream.range(1, l_arguments.size()).boxed()
            .mapToInt(i -> CCommon.rawvalueAssignableTo(l_arguments.get(i), String.class) ? i : -1)
            .filter(i -> i > -1).findFirst().orElseThrow(() -> new CIllegalArgumentException(
                    org.lightjason.agentspeak.common.CCommon.languagestring(this, "relation")));

    // create linear constraint based on an equation
    l_arguments.get(0).<Pair<LinearObjectiveFunction, Collection<LinearConstraint>>>raw().getRight()
            .add(new LinearConstraint(

                    // c_i values
                    l_arguments.stream().limit(l_index - 2).skip(1)
                            .mapToDouble(i -> i.<Number>raw().doubleValue()).toArray(),

                    // c_const value
                    l_arguments.get(l_index - 1).<Number>raw().doubleValue(),

                    // relation symbol
                    this.getRelation(p_argument.get(l_index).<String>raw()),

                    // r_i values
                    l_arguments.stream().skip(l_index + 2).mapToDouble(i -> i.<Number>raw().doubleValue())
                            .toArray(),/*from w w  w .  j a  v a  2s .c o  m*/

                    // r_const value
                    l_arguments.get(p_argument.size() - 1).<Number>raw().doubleValue()));

    return CFuzzyValue.from(true);
}

From source file:org.lightjason.agentspeak.action.builtin.math.linearprogram.CEquationConstraint.java

@Nonnull
@Override/*from   w  w  w.j  av a 2 s . c  o m*/
public final IFuzzyValue<Boolean> execute(final boolean p_parallel, @Nonnull final IContext p_context,
        @Nonnull final List<ITerm> p_argument, @Nonnull final List<ITerm> p_return) {
    final List<ITerm> l_arguments = CCommon.flatten(p_argument).collect(Collectors.toList());

    // create left-hand-side and right-hand-side with operator lists
    final List<Number> l_lhs = StreamUtils
            .takeWhile(l_arguments.stream().skip(1), i -> !CCommon.rawvalueAssignableTo(i, String.class))
            .map(ITerm::<Number>raw).collect(Collectors.toList());

    final List<ITerm> l_rhs = l_arguments.stream().skip(l_lhs.size() + 1).collect(Collectors.toList());

    // test content
    if ((l_lhs.size() < 2) || (l_rhs.size() < 3) || (!CCommon.rawvalueAssignableTo(l_rhs.get(0), String.class)))
        return CFuzzyValue.from(false);

    // create constraint
    l_arguments.get(0).<Pair<LinearObjectiveFunction, Collection<LinearConstraint>>>raw().getRight()
            .add(new LinearConstraint(

                    // c_i values
                    l_lhs.stream().limit(l_lhs.size() - 1).mapToDouble(Number::doubleValue).toArray(),

                    // c_const value
                    l_lhs.get(l_lhs.size() - 1).doubleValue(),

                    // relation symbol
                    this.getRelation(l_rhs.get(0).<String>raw()),

                    // r_i values
                    l_rhs.stream().limit(l_rhs.size() - 1).skip(1).map(ITerm::<Number>raw)
                            .mapToDouble(Number::doubleValue).toArray(),

                    // r_const value
                    l_rhs.get(l_rhs.size() - 1).<Number>raw().doubleValue()

    ));

    return CFuzzyValue.from(true);
}

From source file:org.lightjason.agentspeak.action.builtin.TestCActionMathLinearprogram.java

/**
 * test equation constraint//from   www. j  a  v a 2 s  .co  m
 */
@Test
public final void equationconstraint() {
    final LinearConstraint l_result = new LinearConstraint(new double[] { 2, 7, 12 }, 19.0, Relationship.EQ,
            new double[] { 1, 2, 3 }, 5.0);

    new CEquationConstraint().execute(false, IContext.EMPTYPLAN,
            Stream.of(m_linearprogram, 2, 7, 12, 19.0, "=", 1, 2, 3, 5.0).map(CRawTerm::from)
                    .collect(Collectors.toList()),
            Collections.emptyList());

    Assert.assertEquals(m_linearprogram.getRight().size(), 1);
    Assert.assertArrayEquals(
            Stream.of(l_result.getValue(), l_result.getRelationship(), l_result.getCoefficients()).toArray(),

            Stream.of(m_linearprogram.getRight().iterator().next().getValue(),
                    m_linearprogram.getRight().iterator().next().getRelationship(),
                    m_linearprogram.getRight().iterator().next().getCoefficients()).toArray());
}