2011-07-30 11 views
5

誰かがjavascriptからファジーロジックにアクセスする方法を知っていますか?私はJavaとC++で良いファジーライブラリを持っていますが、HTML5/javascriptから実行できるものが欲しかったです。FuzzyLogic in Javascript?

答えて

1

オプションは次のとおりです。

  1. は、Webページからアクセスするサーバーと使用AJAXのロジックを置きます。
  2. JavaScriptで書き直して、ページに組み込んでください。
  3. ブラウザプラグインにC++を入れて、javascriptからプラグインにアクセスします。

オプション1)または2)は、状況の詳細に応じて正常に動作する可能性があります。オプション3)は、プラグインの配布、メンテナンス、テスト、ユーザーの頭痛を何らかの形で処理する価値のある非常に特殊なアプリケーションでない限り、一般的には悪い考えです。

+0

asm.jsとすぐにWebアセンブリがあります。 – jldupont

+0

@jldupont - asm.jsはJavascriptのサブセットであり、より速く実行できるので、私のポイント#2の下で確実にカバーされます。 OPは、彼らが何らかの形でそれを行うことができるようにするためにはJavascriptのに自分のコードを取得する必要があるとしているので、彼らは「HTML5/JavaScriptから実行する」可能性が何かを要求します。 webAssemblyは面白いです(C++からWASMへのクロスコンパイルを可能にするかもしれませんが、OPが求めていることはそれほど明白ではありません)。 – jfriend00

0

にのための私の答えを使用することができNodeJSでやりたい人は、javacriptに慣れているので

素晴らしいnodejs-javaと、Javaで書かれた奇跡のjFuzzyliteライブラリを使用してください。

ノード-javaの:https://www.npmjs.com/package/java

Fuzzylite:http://www.fuzzylite.com/。それは私がMatlabのmembership_function_pn.fisにメンバーシップ関数を作成しましたjfuzzylite.jarに

を提供し、それは2つの入力と1つの出力を持っています。 Matlabのコマンドインタフェースにmfeditと入力すれば、ファジー関数を簡単に作成できるFISエディタが表示されます。

以下は私のコードです。 (コードがNodejsでどのように機能するかを理解するには、jfuzzylite.jarからJavaで実践してください)。

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);