[elektro-etc] Kis matek :-)

Balázs Bámer bamerbalazs at gmail.com
Mon Oct 2 09:36:29 CEST 2006


Szervusz Gábor!

B1*0.92 <= Qa*F1a + Qb*F1b + Qc*F1c <= B1*1.08
>

Nekem ez lineáris programozási, pontosabban optimumkeresési feladatnak
tűnik. Ezekre nagyon jó a http://lpsolve.sourceforge.net/5.5/ ami egy nagyon
hatékony lineárisalgebra-programcsomag. Én Java-s felületét használtam, de
biztosan jó a C-s vagy más nyelvű is. A fönti sor két egyenlőtlenség, és
mivel ebből van hat, megadsz neki hat ilyet szépen leírva. Segítségül egy
saját program, amivel kitapasztaltam a működését:

Ez az
a 2b 3c
4d 5e 6f
7g 8h 9i
ahol sorok és oszlopok összege 1, és minden betű értéke nemnegatív. Több
lehetséges megoldásból kiad egyet. A te esetedben is egyet fog kiadni, de
megfelelő feltételekkel (akár továbbiak hozzáadásával) szerintem a várt
eredményt is megkaphatod.

szia: Balázs

import lpsolve.*;

public class Demo {
    public static void main(String[] args) {
        try {
      // 1 2 3 | 1
      // 6 5 4 | 1
      // 7 8 9 | 1
      // ------+
      // 1 1 1

        LpSolve solver = LpSolve.makeLp(0, 9);

      // add constraints
        solver.strAddConstraint("1 1 1 0 0 0 0 0 0", LpSolve.EQ, 1);
        solver.strAddConstraint("0 0 0 1 1 1 0 0 0", LpSolve.EQ, 1);
        solver.strAddConstraint("0 0 0 0 0 0 1 1 1", LpSolve.EQ, 1);
        solver.strAddConstraint("1 0 0 1 0 0 1 0 0", LpSolve.EQ, 1);
        solver.strAddConstraint("0 1 0 0 1 0 0 1 0", LpSolve.EQ, 1);
        solver.strAddConstraint("0 0 1 0 0 1 0 0 1", LpSolve.EQ, 1);
        solver.strAddConstraint("1 0 0 0 0 0 0 0 0", LpSolve.GE, 0);
        solver.strAddConstraint("0 1 0 0 0 0 0 0 0", LpSolve.GE, 0);
        solver.strAddConstraint("0 0 1 0 0 0 0 0 0", LpSolve.GE, 0);
        solver.strAddConstraint("0 0 0 1 0 0 0 0 0", LpSolve.GE, 0);
        solver.strAddConstraint("0 0 0 0 1 0 0 0 0", LpSolve.GE, 0);
        solver.strAddConstraint("0 0 0 0 0 1 0 0 0", LpSolve.GE, 0);
        solver.strAddConstraint("0 0 0 0 0 0 1 0 0", LpSolve.GE, 0);
        solver.strAddConstraint("0 0 0 0 0 0 0 1 0", LpSolve.GE, 0);
        solver.strAddConstraint("0 0 0 0 0 0 0 0 1", LpSolve.GE, 0);

      // set objective function
        solver.strSetObjFn("1 2 3 6 5 4 7 8 9");

      // solve the problem
        solver.solve();

      // print solution
      System.out.println("Value of objective function: " +
solver.getObjective());
      double[] var = solver.getPtrVariables();
      for (int i = 0; i < var.length; i++) {
        System.out.println("Value of var[" + i + "] = " + var[i]);
      }

      // delete the problem and free memory
      solver.deleteLp();
    }
    catch (LpSolveException e) {
       e.printStackTrace();
    }
  }

}


More information about the Elektro-etc mailing list