# 最適化 > LeekScript チュートリアル
ここでは最適化について説明します。最適化の目的は、アルゴリズムのパフォーマンスを向上させることです。一般に、最適化について話すときは、実行時間について話します。目標は、一連の命令の実行に必要な時間を短縮することです。
LeekScript では、この実行時間は数値 (この計算で使用される操作の数) によって推定されます。 したがって、言語に関係なく、プログラムを最適化するための特定の優れたプラクティスと優れた反射神経、および LeekScript に固有の特定の最適化、および操作のカウント方法に密接に関連する特定の最適化について説明します。
まだ読んでいない場合は、LeekScript チュートリアル の記事 操作 を読むことをお勧めします。
たとえば、一度だけ呼び出された関数で 500 の操作を保存すると、500 の操作しか保存されません。 (論理) 一方、数万回の演算の場合、ループオブループのループ内で呼び出される関数に対して、単一の演算を節約することでコストを削減できます。
これにより、2番目のポイントが得られます。
コードを最適化する作業の半分は、操作がどこから出てくるかを探すことだけです (その後、大声で叫び、戻ってくるように指示する必要があります)。コード内で高価なものは何ですか?
そのために、秘密はありません、私たちは測定します!
私たちの武器庫では、LeekScript は非常に便利な関数 getOperations を提供します。 この関数により、コード内で今までに費やされた操作の数を知ることができます。
関数のコストを測定する簡単なツールの例:
グローバル __debug_operation; 関数 startOp(){ __debug_operation = getOperations(); } 関数 stopOp(タイトル){ let ops = getOperations()-__debug_operation - 3; debug("操作 (" + タイトル + "): " + ops); }
startOp(); stopOp("空のテスト"); // 空のテスト: 0
startOp(); say("こんにちは世界"); stopOp("こんにちは世界"); // ハローワールド: 30
したがって、ドキュメントで発表されているように、30 回の操作のコストがあることを確認できます。
それは可能であり、関数の呼び出し数や平均コストなど、AI の他のものを測定するツールを作成することを強くお勧めします。これにより、AI のコストの進化をより適切に測定できます。特定の最適化の影響。
複雑さページは、アルゴリズムが高価な理由と問題の解決方法を理解するのに役立ちます。非常に簡単にまとめると、それらの間でループをネストすることはできる限り避けたいと考えています。また、マップのすべてのセルを参照するのではなく、アクセス可能なセルのみを参照するなどして、ループのサイズを制限しようとします。 複雑さの低いアルゴリズムは、処理するのに十分な数のアイテムに対して * はるかに * 少ない操作を使用することに注意することが重要です。小さな最適化をスクラッチしようとする前に、それについて考えてください!
次のコードを想像してください。
let TP = getTP();
// 敵をできるだけ多く撃ちます! for (var i = 0; i < floor(TP / getWeaponCost(getWeapon())); i++) { useWeapon(getNearestEnemy()); }
getNearestEnemy 関数は、ループの反復ごとに呼び出されますが、常に同じ結果が返されます!これを避けるには、関数の前に結果を変数に入れてください。 各反復で評価される floor(TP / getWeaponCost(getWeapon())) についても同じことを行います。 どちらが与える:
let TP = getTP();
// 敵をできるだけ多く撃ちます! var 敵 = getNearestEnemy(); var nbShots = floor(TP / getWeaponCost(getWeapon())); // 現在の武器で可能なショット数 for (var i = 0; i < nbShots; i++) { useWeapon(敵); }
inArray、inArray は実用的で、私たちが望むことを行いますが、一見しただけでは気付かない操作にかなりのコストがかかります。 実際、内部は次のようになっています。
関数inArray(要素、配列){ for (配列内の var 値) if (値 == 項目) true を返します。 false を返します。 }
この例は、少し複雑なことを説明するのに適した例です。 ここで、この関数の実際のコストは、最悪の場合、配列 array のサイズに依存することがわかります。これには n* という名前を付けます。 したがって、この関数は複雑さ *n を持ち、
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.