2011-07-30 23 views
5

¿Alguien sabe cómo se puede acceder a la lógica difusa desde javascript? Tengo una buena biblioteca difusa en Java y C++, pero quería algo que pudiera ejecutar desde HTML5/javascript.FuzzyLogic en Javascript?

Respuesta

1

Las opciones son:

  1. poner la lógica en el servidor y el uso de AJAX para acceder a él desde una página web.
  2. Vuelva a escribirlo en javascript e inclúyalo en su página.
  3. Coloque el C++ en un complemento del navegador y acceda al complemento desde javascript.

Las opciones 1) o 2) podrían funcionar bien dependiendo de los detalles de la situación. Opción 3) es generalmente una mala idea a menos que sea una aplicación muy especializada que de alguna manera hace que valga la pena lidiar con la distribución, el mantenimiento, las pruebas y los dolores de cabeza de los usuarios de un complemento.

+0

ahora hay asm.js y pronto conjunto web. – jldupont

+0

@jldupont - asm.js es un subconjunto de Javascript que se puede ejecutar mucho más rápido, por lo que ciertamente estaría cubierto por mi punto 2. El OP pide algo que puedan "ejecutar desde HTML5/Javascript", por lo que tendrán que obtener su código en Javascript para poder hacer eso. webAssembly es interesante (quizás permitiendo una compilación cruzada de C++ a WASM, pero ni siquiera está claro eso es lo que el OP está pidiendo). – jfriend00

0

Mi respuesta para aquellos que quieren hacer en NodeJS, ya que está familiarizado con javascript

Utilice un impresionante nodejs-java, y una biblioteca jFuzzylite milagrosa que está escrita en Java.

nodo-java: https://www.npmjs.com/package/java

Fuzzylite: http://www.fuzzylite.com/. Proporciona jfuzzylite.jar

He creado una función de pertenencia en Matlab membership_function_pn.fis, que tiene dos entradas y una salida. Escriba mfedit en la interfaz de comandos de Matlab, aparecerá un editor FIS donde puede hacer fácilmente su función difusa.

El siguiente es mi código que hizo el trabajo !! (Para comprender cómo funciona el código en Nodejs, realice primero una práctica en Java con jfuzzylite.jar).

var java = require("java"); 
var fs = require("fs"); 
java.classpath.push("commons-lang3-3.1.jar"); 
java.classpath.push("commons-io.jar"); 
java.classpath.push("jfuzzylite.jar"); 


var matlabString = fs.readFileSync("dataMatlab/membership_function_pn.fis", 'utf8'); 
var FisImporter = java.newInstanceSync("com.fuzzylite.imex.FisImporter"); 
var engineMatlab = java.callMethodSync(FisImporter, "fromString", matlabString); 
var InputVariable = java.newInstanceSync('com.fuzzylite.imex.FisImporter'); 


var OutputVariable = java.callMethodSync(engineMatlab, "getOutputVariable", 0); 
var bandwidthInputVariable = java.callMethodSync(engineMatlab, "getInputVariable", 0); 
var timeInputVariable = java.callMethodSync(engineMatlab, "getInputVariable", 1); 
java.callMethodSync(bandwidthInputVariable, "setInputValue", -0.5); 
java.callMethodSync(timeInputVariable, "setInputValue", 0.5); 
java.callMethodSync(engineMatlab, "process"); 
var resultFuzzy = java.callMethodSync(OutputVariable, "getOutputValue"); 

console.log("안녕하세요" + resultFuzzy);