parent
71dc0d33d2
commit
91292e04ed
4 changed files with 114 additions and 35 deletions
@ -0,0 +1,13 @@ |
||||
# 突然変異確率の影響 比較表(エリート選択、10回試行の平均) |
||||
# 列定義: |
||||
# 1: MutationRate - 突然変異確率 (MUTATION_RATIO) |
||||
# 2: MeanBest - 平均最終距離 |
||||
# 3: MinBest - 最短距離 (Best) |
||||
# 4: OptRate(%) - 最適解到達率 (最適解: 35.63) |
||||
# |
||||
# MutationRate, MeanBest, MinBest, OptRate(%) |
||||
0.01, 42.37, 38.69, 0 |
||||
0.05, 38.41, 35.63, 30 |
||||
0.10, 39.44, 35.63, 10 |
||||
0.20, 37.16, 35.63, 40 |
||||
0.50, 36.82, 35.63, 50 |
||||
@ -0,0 +1,62 @@ |
||||
$ratesStr = @("0.01", "0.05", "0.10", "0.20", "0.50") |
||||
$outputFile = "compare\em_summary_v2.dat" |
||||
|
||||
# ヘッダー書き込み |
||||
@" |
||||
# 突然変異確率の影響 比較表(エリート選択、10回試行の平均) |
||||
# 列定義: |
||||
# 1: MutationRate - 突然変異確率 (MUTATION_RATIO) |
||||
# 2: MeanBest - 平均最終距離 |
||||
# 3: MinBest - 最短距離 (Best) |
||||
# 4: OptRate(%) - 最適解到達率 (最適解: 35.63) |
||||
# |
||||
# MutationRate, MeanBest, MinBest, OptRate(%) |
||||
"@ | Out-File -FilePath $outputFile -Encoding ASCII |
||||
|
||||
$tsp_h = "tsp.h" |
||||
$content = Get-Content -Path $tsp_h -Raw |
||||
|
||||
foreach ($rateStr in $ratesStr) { |
||||
# tsp.h の MUTATION_RATIO 行を置換 |
||||
$newContent = $content -replace '#define MUTATION_RATIO [\d\.]+', "#define MUTATION_RATIO $rateStr" |
||||
Set-Content -Path $tsp_h -Value $newContent -Encoding Default |
||||
|
||||
# コンパイル |
||||
gcc tsp.c tsp_jikken.c tsp_public.c tsp_private.c -o tsp.exe -lm |
||||
|
||||
# 実行 |
||||
$output = .\tsp.exe check.dat |
||||
|
||||
# 出力の解析 |
||||
$bestLengths = @() |
||||
foreach ($line in $output) { |
||||
if ($line -match '^#') { continue } |
||||
$parts = $line -split ',' |
||||
if ($parts.Length -ge 4) { |
||||
$bestLengths += [double]$parts[3].Trim() |
||||
} |
||||
} |
||||
|
||||
if ($bestLengths.Count -gt 0) { |
||||
$meanBest = ($bestLengths | Measure-Object -Average).Average |
||||
$minBest = ($bestLengths | Measure-Object -Minimum).Minimum |
||||
$optCount = ($bestLengths | Where-Object { $_ -le 35.631 }).Count |
||||
$optRate = ($optCount / $bestLengths.Count) * 100 |
||||
|
||||
# ファイルに追記 (カルチャ依存を回避して文字列操作) |
||||
$meanBestStr = [math]::Round($meanBest, 2).ToString("0.00", [System.Globalization.CultureInfo]::InvariantCulture) |
||||
$minBestStr = [math]::Round($minBest, 2).ToString("0.00", [System.Globalization.CultureInfo]::InvariantCulture) |
||||
$optRateStr = [math]::Round($optRate, 0).ToString("0", [System.Globalization.CultureInfo]::InvariantCulture) |
||||
|
||||
$lineOut = "{0}, {1}, {2}, {3}" -f $rateStr, $meanBestStr, $minBestStr, $optRateStr |
||||
Add-Content -Path $outputFile -Value $lineOut -Encoding ASCII |
||||
Write-Host "Completed rate $rateStr" |
||||
} else { |
||||
Write-Host "Error parsing output for rate $rateStr" |
||||
} |
||||
} |
||||
|
||||
# tsp.h を 0.20 に戻す |
||||
$newContent = $content -replace '#define MUTATION_RATIO [\d\.]+', "#define MUTATION_RATIO 0.20" |
||||
Set-Content -Path $tsp_h -Value $newContent -Encoding Default |
||||
Write-Host "All experiments completed." |
||||
Loading…
Reference in new issue