Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    chiamare e usare lp_solve da java

    Salve ragazzi, qualcuno sà come poter chiamare lp_solve da java??..ho cercato un pò sul web, ma non riesco a trovare niente di utile..in pratica io ho scritto un programmino che crea una matrice A in un certo modo, un vettore b e un vettore x di valori casuali di 0 e 1 e dovrei richiamare questo lp_solve dandogli in pasto A, x e b per risolvere il sistema lineare Ax = b.
    Vi ringrazio in anticipo..

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Magari se ci dici anche cos'è questo "lp_solve" (che, da solo, non significa nulla), magari qualcuno ti può anche essere maggiormente d'aiuto.

    Se è un programma esterno da richiamare, allora si dovrà usare il metodo exec() della classe Runtime; ma, ripeto, non sapendo che cosa sia questo "lp_solve" si può solo andare a intuito.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Si scusa, hai pienamente ragione..allora lp_solve è un solutore di programmazione lineare (per interi) scritto in ANSI C e basato sul metodo del simplesso riveduto e il metodo Branch-and-bound per i numeri interi.
    Ho trovato scritto in questa reference guide ( http://lpsolve.sourceforge.net/5.5/ ) che può essere chiamato come una libreria..
    Ho trovato questa guida: http://ocw.mit.edu/courses/aeronauti...10_lpsolve.pdf ed ho seguito passo passo le istruzioni, solo che non riesco a capire cosa devo fare nel punto 4:
    4) Copy the archive file lpsolve55j.jar from the Java wrapper distribution to a directory that is included in the CLASSPATH of your java program. Alternatively, you can also selcet any directory of your choice (e.g. C:\Programmi<86>\lpsolve and ad that directory in the CLASSPATH )
    cioè, devo salvare lpsolve55j.jar nel PATH delle variabili d'ambiente di Windows?
    Devo creare un CLASSPATH nelle variabili d'ambiente di windows?
    oppure devo andare nelle proprietà del progetto java dal quale devo richiamare lp_solve?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Carlitos84
    cioè, devo salvare lpsolve55j.jar nel PATH delle variabili d'ambiente di Windows?
    No. Deve essere raggiungibile nel CLASSPATH di esecuzione del tuo programma (CLASSPATH non è la variabile PATH, sono due cose completamente diverse con scopi diversi). Se non sai cos'è il CLASSPATH dovrai rivedere diverse cose della programmazione Java: essa è la "fonte" da cui Java pesca le librerie (anche quelle esterne) per far funzionare le applicazioni.

    Devo creare un CLASSPATH nelle variabili d'ambiente di windows?
    No, non è necessario (anzi, io lo sconsiglio).
    Puoi specificare il classpath usando l'opzione "-cp" da linea di comando oppure, se hai un JAR, è sufficiente indicare il percorso alla libreria all'interno del MANIFEST (quest'ultima cosa la fa da solo il tuo ambiente di sviluppo, se ne usi uno).

    oppure devo andare nelle proprietà del progetto java dal quale devo richiamare lp_solve?
    Esatto. Devi andare nelle proprietà del progetto Java e aggiungere una libreria: la libreria è quel jar lì.

    C'è da dire che il concetto di CLASSPATH deve essere ben chiaro a chi sviluppa in Java.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    ok tutto chiaro..ho aggiunto la libreria .jar al progetto attraverso Properties, pensavo fosse tutto ok ed invece quando ho eseguito un esempio che ho trovato nella spiegazione:
    codice:
    import lpsolve.*;
      public class Demo {
        public static void main(String[] args) {
         try {       // Create a problem with 4 variables and 0 constraints
           LpSolve solver = LpSolve.makeLp(0, 4);        // add constraints 
           solver.strAddConstraint("3 2 2 1", LpSolve.LE, 4);
           solver.strAddConstraint("0 4 3 1", LpSolve.GE, 3);        // set objective function 
           solver.strSetObjFn("2 3 -2 3");        // 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();
        }   
    }  
    }
    restituisce l'errore:
    Exception in thread "main" java.lang.UnsatisfiedLinkError: no lpsolve55j in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java :1860)
    at java.lang.Runtime.loadLibrary0(Runtime.java:845)
    at java.lang.System.loadLibrary(System.java:1084)
    at lpsolve.LpSolve.<clinit>(LpSolve.java:274)
    at Demo.execute(Demo.java:38)
    at Demo.main(Demo.java:281)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 0 seconds)
    non riesco a capire perchè...

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Evidentemente quella libreria richiede delle librerie native (delle DLL per Windows, o qualche .so per Linux, ecc) che devono essere copiate nella directory del sistema operativo (Windows\system32 per Windows, /lib per Linux, ecc) o comunque all'interno di una delle directory elencate nella property "java.library.path" (che può essere settata tramite opzione "-D" da riga di comando) in modo che possano essere caricate.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.