ประเมิน
ส่งทุก permutation เข้า evaluator เดียวกัน ได้ scalar fitness หรือ objective vector
ติดตามหนึ่ง generation ตั้งแต่ประเมิน permutation เลือกกลุ่มที่ดีและแย่ นับ coincidence ปรับน้ำหนักจำนวนเต็ม และสุ่มประชากรรุ่นใหม่ พร้อมแยกให้เห็นว่า Edge, NB, CNB, SNE-COIN และ Hybrid สองแบบเรียนรู้อะไรต่างกัน
ส่งทุก permutation เข้า evaluator เดียวกัน ได้ scalar fitness หรือ objective vector
เลือก reward จากด้านดี และ punishment จากด้านแย่
แปลง permutation เป็น edge หรือ position events ตาม variant
Conservative ย้ายมวลน้ำหนัก; Reconstruction สร้าง matrix ใหม่
roulette เฉพาะ item ที่ยังไม่ใช้ จึงถูกต้องโดย construction
ตัวอย่าง minimization: population 8 และ ratio 25:25 เลือกคำตอบดีที่สุด 2 ตัวเป็นหลักฐานบวก และแย่ที่สุด 2 ตัวเป็นหลักฐานลบ ตัวกลางยังถูกประเมินและอาจเป็น best-so-far แต่ไม่เขียนลง model ในรอบนี้
[1,3,5,0,4,2][1,5,3,0,2,4][3,1,0,5,2,4][4,0,2,1,5,3][0,4,1,3,2,5][5,2,0,4,3,1][2,4,5,1,0,3][4,2,1,5,3,0]ไม่ใช่จำนวนรอบ selection. Reward 10% หมายถึงประมาณ 10% ของ population ถูกใช้เป็นหลักฐานบวกในแต่ละ generation
Edge COIN เก็บ H[a,b] ขนาด n×n สำหรับน้ำหนักที่ b ตามหลัง a คำตอบ [1,3,5,0,4,2] ให้เหตุการณ์ 1→3, 3→5, 5→0, 0→4, 4→2 และ closing edge 2→1
[1,3,5,0,4,2]used = {start}
while len(order) < n:
candidates = items - used
p(j) ∝ H[previous,j]
next = roulette(candidates,p)
append(next)
H[i,i] = 0
H[i,j] ≥ 1 for i ≠ jน้ำหนัก off-diagonal เริ่มที่ round(n×100/training rate) Punishment ลดช่องที่พบในกลุ่มแย่แล้วกระจายให้คู่แข่งในแถว; reward ดึงจากคู่แข่งเข้าช่องที่พบในกลุ่มดี ทุก legal edge ยังเป็นบวก
สร้างใหม่จาก reward count ของรอบล่าสุด ช่องที่ไม่พบยังมีน้ำหนัก 1 จึงไม่ปิด exploration โหมดนี้ตอบสนองไวแต่ลืมประวัติมากกว่า
เก็บ W[position,item] ก่อนสร้างคำตอบจะ shuffle ลำดับตำแหน่ง แล้วสุ่ม item ที่ยังไม่ใช้จากแถวของตำแหน่งนั้น จึงลดอคติจากการเติมซ้ายไปขวา
positions=shuffle(0..n-1)
for p in positions:
x[p] ~ W[p,unused]ใช้ matrix และ learner เดียวกับ NB แต่เติมตำแหน่ง 0,1,…,n−1 ตามลำดับ จึงเป็น Chained Node-Based COIN
for p in range(n):
x[p] ~ W[p,unused]เก็บ S[item] สำหรับตำแหน่งแรก และ H[a,b] สำหรับตำแหน่งต่อไป เหมาะเมื่อ start/depot/seed มีความหมาย
x[0] ~ S[unused]
x[p] ~ H[x[p-1],unused]template [1,_,3,_,_,6,_,7,_]
result [1,9,3,5,4,6,8,7,2]ตำแหน่ง 0 มาจาก Node จากนั้นทุกตำแหน่งสุ่มเลือกแหล่ง W[position] หรือ H[previous] แบบอิสระ และบันทึก source mask ไว้วิเคราะห์
x[0] ~ W[0,unused]
for p=1..n-1:
if Bernoulli(.5): x[p]~W[p,unused]
else: x[p]~H[x[p-1],unused]ต่างกันตรง schema: HNE-COIN ตรึง partial schema ก่อน reconstruct; Chain เลือก model ทีละ link และไม่มี template ล่วงหน้า
| Variant | ความรู้ | วิธีสุ่ม | MO |
|---|---|---|---|
| Edge COIN | H[previous,next] | edge chain | MO Edge COIN |
| NB-COIN | W[position,item] | random position first | MO NB-COIN |
| CNB-COIN | W[position,item] | position 0→n | MO CNB-COIN |
| SNE-COIN | S[start]+H[edge] | start then edge | MO SNE-COIN |
| HNE-COIN | W+H | Node template→Edge fill | MO HNE-COIN |
| CNE-COIN | W+H | Node/Edge per link | MO CNE-COIN |
ใช้ nondominated rank/Pareto depth ร่วมกับ diversity score สร้าง reward/punishment evidence และเก็บ external archive ส่วน matrix และ sampler ของแต่ละ variant เหมือนเดิม
F(x)=[f₁(x),…,fₘ(x)]
rank 0 = nondominated
reward ← strong Pareto evidence
punish ← weak/deep-rank evidence
archive ← nondominated unionค่าน้อยเลือกเข้มแต่ noisy; ค่าสูงนิ่งกว่าแต่อาจเฉลี่ยหลาย basin
สัดส่วนกลุ่มแย่ที่ใช้ลดน้ำหนัก ไม่ใช่ mutation rate
กำหนดน้ำหนักเริ่มต้น round(n×100/rate); rate สูงทำให้หลักฐานใหม่มีผลเร็ว
Conservative สะสมและย้ายมวล; Reconstruction สร้างจาก reward ล่าสุด.
| Family | Memory | Count | Sample |
|---|---|---|---|
| Edge / NB / CNB | Θ(n²) | Θ(Pn) | Θ(Pn²) |
| SNE-COIN | Θ(n²+n) | Θ(Pn) | Θ(Pn²) |
| Hybrids | Θ(2n²) | Θ(Pn) | Θ(Pn²) |
ไม่มี item ซ้ำ/หาย; Edge diagonal=0; legal weight≥1; seed เดิม reproduce ได้
best-so-far ทุก objective, diversity, weight concentration, Pareto depth, archive size และ evaluations-to-solution
| ส่วน | Source | หน้าที่ |
|---|---|---|
| Edge | models/edge_reference.pymodels/edge_optimized.py | อ่านง่าย + NumPy/Numba ที่ทดสอบ equivalence |
| Learning | learning/reward_punishment.py | kernel ปรับ integer weights |
| NB / CNB | models/position.pymodels/cnb_position.py | position samplers สองแบบ |
| Composite | models/start_node_edge.pymodels/hybrid.pymodels/hybrid_chain.py | start และ hybrid variants |
| Multi-objective | core/multiobjective.py | Pareto selection · archive · progress |
ใช้ชื่อ variant ปัจจุบันของ reusable library และไม่เพิ่ม Legacy Hybrid ที่ซ้ำซ้อนกลับมา