บทแนะนำ 6 ขั้นตอน รันตามลำดับในหนึ่งเซสชัน ทุกขั้นถูกรันกับเอนจินจริง และเอาต์พุตด้านล่างคือสิ่งที่มันให้
Clear[f, sol];ไม่มีเอาต์พุต - ขั้นนี้ตั้งค่าบางอย่างไว้ให้ขั้นถัดไป
attackQ[{i_Integer, xi_Integer}, {j_Integer, xj_Integer}] := Or[i - j == 0, xi - xj == 0, i - j == xi - xj, i - j == xj - xi]ไม่มีเอาต์พุต - ขั้นนี้ตั้งค่าบางอย่างไว้ให้ขั้นถัดไป
countAttacks[q : {_Real..}] := Block[{qns = Ordering[q], n = Length[q]}, Count[Flatten[Table[attackQ[{i, qns[[i]]}, {j, qns[[j]]}], {i, 1, n - 1}, {j, i + 1, n}]], True]]ไม่มีเอาต์พุต - ขั้นนี้ตั้งค่าบางอย่างไว้ให้ขั้นถัดไป
queenPlot[vec_] := Module[{veclength = Length[vec]}, Show[Graphics[Join[ Table[Line[{{1, i}, {veclength + 1, i}}], {i, veclength + 1}], Table[Line[{{i, 1}, {i, veclength + 1}}], {i, veclength + 1}]]], Graphics[Table[Disk[{i + .5, vec[[i]] + .5}, 0.25], {i, veclength}]], AspectRatio -> 1]]ไม่มีเอาต์พุต - ขั้นนี้ตั้งค่าบางอย่างไว้ให้ขั้นถัดไป
vars = Array[Subscript[q, #]&, 8];
{f, sol} = NMinimize[countAttacks[vars], vars, Method -> {"DifferentialEvolution", "PostProcess" -> False}];
{f, Thread[vars -> (sol = Ordering[sol[[All, 2]]])]}{f, {Subscript[q, 1] -> Ordering[sol[[2]]], Subscript[q, 2] -> Ordering[sol[[2]]], Subscript[q, 3] -> Ordering[sol[[2]]], Subscript[q, 4] -> Ordering[sol[[2]]], Subscript[q, 5] -> Ordering[sol[[2]]], Subscript[q, 6] -> Ordering[sol[[2]]], Subscript[q, 7] -> Ordering[sol[[2]]], Subscript[q, 8] -> Ordering[sol[[2]]]}}queenPlot[sol]-Graphics-สูตรงานทั้งหมด · เอกสารอ้างอิงฟังก์ชัน · ใช้สิ่งนี้จากไคลเอนต์ MCP