[関連する推奨事項: Python3 ビデオ チュートリアル ]
1. 遺伝的アルゴリズムとは何ですか?
遺伝的アルゴリズムは、生物学の遺伝学と自然選択のメカニズムをシミュレートすることによって人工的に構築された検索アルゴリズムの一種であり、ある意味、生物進化プロセスの数学的シミュレーションです。生物学的集団の生存プロセスは一般にダーウィンの進化論に従い、集団内の個体は環境に適応する能力に基づいて自然に選択または排除されます。進化の過程の結果は個体の構造に反映され、その染色体には複数の遺伝子が含まれており、表現型と遺伝子型の間の対応する関係は、個体の外部特性と内部メカニズムの間の論理的関係を反映しています。個体間の交雑や突然変異を経て自然環境に適応する。生物学的染色体は、数学的またはコンピューター的に数字の列として表され、依然として染色体と呼ばれ、個体とも呼ばれます。適応性は、染色体に対応する数値によって測定されます。染色体の選択または削除は、直面している問題に基づいています。最大値を見つけます。または最小限。
2. 遺伝的アルゴリズム ライブラリ Geatpy
2.1 遺伝的アルゴリズム ツールボックス Geatpy パラメーターの概要
API 公式リファレンス ドキュメント
population パラメータ[重要な属性: Chrom、Phen、Objv、CV、FitnV]
- sizes: int - 人口サイズ、つまり、人口の個体数。
- ChromNum: int - 染色体の数、つまり各個人が持つ染色体の数。
- エンコーディング: str - 染色体エンコーディング方式、'BG': バイナリ/グレー エンコーディング、'RI': 実数整数エンコーディング、つまり実数と整数の混合エンコーディング、'P': 順列エンコーディング
- Field : 配列 - デコード行列
- Chrom : 配列 - 人口染色体行列。各行は個人の染色体に対応します。
- Lind : int - 集団の染色体長。
- ObjV: 配列 - 母集団の目的関数値行列、各行は個人の目的関数値に対応、各列はターゲットに対応
- FitnV: 配列 - 母集団の個人適応度の列ベクトル、それぞれ要素は個人の適応度に対応し、最小適応度は 0
- CV: 配列 - CV (Constraint Violation Value) は、制約条件の違反の程度を定量的に記述するために使用される行列です。制約
- Phen: 配列 - 集団表現型行列 (つまり、解読後の集団の各染色体によって表される決定変数で構成される行列) に対応します。
- 制約が CV マトリックスを介した実現可能性ルールに基づいて設定されている場合、不等式制約は ≤ である必要があり、等式制約は abs() に渡す必要があります (これは、より大きな値が得られるという原則に従うためです)値が小さいほど適応度は小さくなります)
- ##ea.問題.
- init() lbin と ubin (決定変数範囲境界行列) は、範囲間隔の開始と終了を表し、1 が閉じた 0 が開いた間隔です。
Geatpy 結果パラメータの紹介
success: True または False は、アルゴリズムが正常に解決されたかどうかを示します。
stopMsg: アルゴリズムを停止する理由を格納する文字列。
optPop: アルゴリズムの解決結果を格納する母集団オブジェクト。実行可能な解決策がない場合は、optPop.sizes=0 になります。 optPop.Phen は決定変数行列、optPop.ObjV は目的関数値行列です。
lastPop: アルゴリズムの進化が完了した後の最後の世代の母集団オブジェクト。
Vars: optPop.Phen と同じです。これが最適な解決策です。実行可能な解決策がない場合は、Vars=None となります。
ObjV: optPop.ObjV に等しい。これは、最適解に対応する目的関数の値です。実行可能な解決策がない場合は、ObjV=None となります。
CV: optPop.CV に等しい。これは、最適解に対応する制約違反度行列です。実行可能な解決策がない場合は、CV=None となります。
startTime: プログラムの実行開始時刻。
endTime: プログラムの実行終了時刻。
executeTime: アルゴリズムにかかった時間。
nfev: アルゴリズム評価の数
gd: (多目的最適化が行われ、理論的な最適解が与えられた場合にのみ使用可能) GD インデックス値。
igd: (多目的最適化が行われ、理論的な最適解が与えられた場合にのみ利用可能) IGD 指標値。
hv: (多目的最適化の場合のみ) HV インジケーターの値。
spacing: (複数目的最適化の場合のみ) 間隔インジケーターの値。
3. ベスト プラクティス
3.1 コード例|パラメーター テンプレート
ソリューション セット:
header_regex = '|'.join(['{}'] * len(headers)) header_str = header_regex.format(*[str(key).center(width) for key, width in zip(headers, widths)]) print("=" * len(header_str)) print(header_str) print("-" * len(header_str))
[関連する推奨事項:gen: 進化代数
eval: 評価の記録数
f\_opt: 現代最適個体の目的関数値
f \ _max =現代人口の最大関数値有向非巡回グラフ
コード [最短パス] 1: geatpy ライブラリを使用するimport numpy as np import geatpy as ea class MyProblem(ea.Problem): # 继承Problem父类 def __init__(self): name = 'Shortest_Path' # 初始化name(函数名称,可以随意设置) M = 1 # 初始化M(目标维数) maxormins = [1] # 初始化maxormins(目标最小最大化标记列表,1:最小化该目标;-1:最大化该目标) Dim = 10 # 初始化Dim(决策变量维数) varTypes = [1] * Dim # 初始化varTypes(决策变量的类型,元素为0表示对应的变量是连续的;1表示是离散的) lb = [0] * Dim # 决策变量下界 ub = [9] * Dim # 决策变量上界 lbin = [1] * Dim # 决策变量下边界 1表示闭合区间,0表示开区间 ubin = [1] * Dim # 决策变量上边界 # 调用父类构造方法完成实例化 ea.Problem.__init__(self, name, M, maxormins, Dim, varTypes, lb, ub, lbin, ubin) # 设置每一个结点下一步可达的结点(结点从1开始数,因此列表nodes的第0号元素设为空列表表示无意义) self.nodes = [[], [2, 3], [3, 4, 5], [5, 6], [7, 8], [4, 6], [7, 9], [8, 9], [9, 10], [10]] # 设置有向图中各条边的权重 self.weights = {'(1, 2)': 36, '(1, 3)': 27, '(2, 4)': 18, '(2, 5)': 20, '(2, 3)': 13, '(3, 5)': 12, '(3, 6)': 23, '(4, 7)': 11, '(4, 8)': 32, '(5, 4)': 16, '(5, 6)': 30, '(6, 7)': 12, '(6, 9)': 38, '(7, 8)': 20, '(7, 9)': 32, '(8, 9)': 15, '(8, 10)': 24, '(9, 10)': 13} def decode(self, priority): # 将优先级编码的染色体解码得到一条从节点1到节点10的可行路径 edges = [] # 存储边 path = [1] # 结点1是路径起点 while not path[-1] == 10: # 开始从起点走到终点 currentNode = path[-1] # 得到当前所在的结点编号 nextNodes = self.nodes[currentNode] # 获取下一步可达的结点组成的列表 chooseNode = nextNodes[np.argmax( priority[np.array(nextNodes) - 1])] # 从NextNodes中选择优先级更高的结点作为下一步要访问的结点,因为结点从1数起,而下标从0数起,因此要减去1 path.append(chooseNode) edges.append((currentNode, chooseNode)) return path, edges def aimFunc(self, pop): # 目标函数 pop.ObjV = np.zeros((pop.sizes, 1)) # 初始化ObjV for i in range(pop.sizes): # 遍历种群的每个个体,分别计算各个个体的目标函数值 priority = pop.Phen[i, :] path, edges = self.decode(priority) # 将优先级编码的染色体解码得到访问路径及经过的边 pathLen = 0 for edge in edges: key = str(edge) # 根据路径得到键值,以便根据键值找到路径对应的长度 if not key in self.weights: raise RuntimeError("Error in aimFunc: The path is invalid. (当前路径是无效的。)", path) pathLen += self.weights[key] # 将该段路径长度加入 pop.ObjV[i] = pathLen # 计算目标函数值,赋值给pop种群对象的ObjV属性 ## 执行脚本 if __name__ == "__main__": # 实例化问题对象 problem = MyProblem() # 构建算法 algorithm = ea.soea_EGA_templet(problem, ea.Population(Encoding='RI', NIND=4), MAXGEN=10, # 最大进化代数 logTras=1) # 表示每隔多少代记录一次日志信息 # 求解 res = ea.optimize(algorithm, verbose=True, drawing=1, outputMsg=False, drawLog=False, saveFlag=True, dirName='result') print('最短路程为:%s' % (res['ObjV'][0][0])) print('最佳路线为:') best_journey, edges = problem.decode(res['Vars'][0]) for i in range(len(best_journey)): print(int(best_journey[i]), end=' ') print()
Python3 ビデオ チュートリアル]
以上がPython 遺伝的アルゴリズム Geatpy ツールボックスの簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

PythonとCは、メモリ管理と制御に大きな違いがあります。 1。Pythonは、参照カウントとガベージコレクションに基づいて自動メモリ管理を使用し、プログラマーの作業を簡素化します。 2.Cには、メモリの手動管理が必要であり、より多くの制御を提供しますが、複雑さとエラーのリスクが増加します。どの言語を選択するかは、プロジェクトの要件とチームテクノロジースタックに基づいている必要があります。

科学コンピューティングにおけるPythonのアプリケーションには、データ分析、機械学習、数値シミュレーション、視覚化が含まれます。 1.numpyは、効率的な多次元配列と数学的関数を提供します。 2。ScipyはNumpy機能を拡張し、最適化と線形代数ツールを提供します。 3. Pandasは、データ処理と分析に使用されます。 4.matplotlibは、さまざまなグラフと視覚的な結果を生成するために使用されます。

PythonまたはCを選択するかどうかは、プロジェクトの要件に依存するかどうかは次のとおりです。1)Pythonは、簡潔な構文とリッチライブラリのため、迅速な発展、データサイエンス、スクリプトに適しています。 2)Cは、コンピレーションと手動メモリ管理のため、システムプログラミングやゲーム開発など、高性能および基礎となる制御を必要とするシナリオに適しています。

Pythonは、データサイエンスと機械学習で広く使用されており、主にそのシンプルさと強力なライブラリエコシステムに依存しています。 1)Pandasはデータ処理と分析に使用され、2)Numpyが効率的な数値計算を提供し、3)SCIKIT-LEARNは機械学習モデルの構築と最適化に使用されます。これらのライブラリは、Pythonをデータサイエンスと機械学習に理想的なツールにします。

Pythonを1日2時間学ぶだけで十分ですか?それはあなたの目標と学習方法に依存します。 1)明確な学習計画を策定し、2)適切な学習リソースと方法を選択します。3)実践的な実践とレビューとレビューと統合を練習および統合し、統合すると、この期間中にPythonの基本的な知識と高度な機能を徐々に習得できます。

Web開発におけるPythonの主要なアプリケーションには、DjangoおよびFlaskフレームワークの使用、API開発、データ分析と視覚化、機械学習とAI、およびパフォーマンスの最適化が含まれます。 1。DjangoandFlask Framework:Djangoは、複雑な用途の迅速な発展に適しており、Flaskは小規模または高度にカスタマイズされたプロジェクトに適しています。 2。API開発:フラスコまたはdjangorestFrameworkを使用して、Restfulapiを構築します。 3。データ分析と視覚化:Pythonを使用してデータを処理し、Webインターフェイスを介して表示します。 4。機械学習とAI:Pythonは、インテリジェントWebアプリケーションを構築するために使用されます。 5。パフォーマンスの最適化:非同期プログラミング、キャッシュ、コードを通じて最適化

Pythonは開発効率でCよりも優れていますが、Cは実行パフォーマンスが高くなっています。 1。Pythonの簡潔な構文とリッチライブラリは、開発効率を向上させます。 2.Cのコンピレーションタイプの特性とハードウェア制御により、実行パフォーマンスが向上します。選択を行うときは、プロジェクトのニーズに基づいて開発速度と実行効率を比較検討する必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SublimeText3 中国語版
中国語版、とても使いやすい

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
