שְׁאֵלָה:
מהי דרך מדויקת להעריך עמדות שחמט?
Charles Menguy
2012-05-10 21:48:36 UTC
view on stackexchange narkive permalink

התעניינתי זמן מה באלגוריתמים של שחמט ממוחשבים (וקיבלתי את ההזדמנות לעבוד על אחד כזה או אחר) כמו Minimax, וכמרכיב הליבה של האלגוריתמים האלה מה שמכונה פונקציית הערכה כדי לקבוע מהי תצורת לוח טובה ומה היא רע .

ב מונחים אחרים, בהתחשב בתצורה של לוח השחמט שלך, כיצד אתה קובע שזה לטובתך ובאיזו מידה של ביטחון?

לדוגמא:

  • אם אתה בבעלות המרכז, זה די נוח.
  • אם יש לך יותר חלקים מאשר ליריב שלך, זה די נוח.
  • אם איבדת את המלכה שלך , זה דווקא לא נוח.
  • אם יש לך משכון שקרוב לקידום זה נוח.
  • ...

לכן ברצוני לבקש עצות כיצד ליצור פונקציית הערכה טובה , בהתבסס על ידע מומחה כלשהו אודות משחק השחמט באופן כללי. ואם אפשר, מידה של חיוביות (נניח בין 1 להיות מאוד לא נוח, ל 100 להיות מאוד נוח).

הרעיון בסופו של דבר הוא להיות מסוגל ליצור אלגוריתם שייראה בעץ. אפשרויות עד לעומק מסוים ולהעריך מהי התצורה הטובה ביותר למהלך הבא (תוך התחשבות במספר מהלכים בעתיד) על סמך מה שטוב לשחקן ולא נוח ליריב. אך ללא פונקציית הערכה טובה האלגוריתם אינו כלום.

אני חושב ששאלה זו תיטיב עם StackOverflow. יש שם כבר הרבה שאלות לגבי שחמט AI
חשבתי לפרסם אותו ב- SO לפני כן, אבל אני כמעט בטוח שהוא ייסגר כלא בונה או לא שאלה אמיתית שם. אולי אם אני צריך יותר דגש על הקוד עצמו, אבל אני חושב שעבור פונקציית ההערכה זה דורש ידע על שחמט, לא כל כך על קוד או אלגוריתמים.
כמה מדויק. הדרך היחידה המדויקת לחלוטין היא האם ניצחת או הפסדת או שוויונית.
שמונה תשובות:
#1
+10
Eve Freeman
2012-05-11 08:39:43 UTC
view on stackexchange narkive permalink

הנה נקודת התחלה טובה. השוואה בין חומרים היא המפתח (וקל), ואז תוכלו לכוון את זה כדי לשקול היבטים מיקוםיים כמו דרגות / קבצים / אלכסונים פתוחים, מבנה משכון וכו '.

https://www.chessprogramming.org / הערכה

#2
+6
mishaturnbull
2015-03-01 09:17:29 UTC
view on stackexchange narkive permalink

יש לי הרגשה שאני קצת מאחר בתשובה זו אבל - אני גם בתהליך של יצירת מנוע. קוד המקור נמצא ב- Python (שהוא די קל לקריאה, גם אם אינך יודע אותו) והוא זמין כאן אם ברצונך לקרוא אותו. רשימת ה'יוריסטיקות 'הפעילות כיום (בזמן הפרסום):

  • חלקים מפותחים יותר (קרוב יותר לצד השני) טובים יותר
  • משכונות קרובות יותר לקידום הן טוב
  • מלכים נקבעים בנפרד על סמך השלב בו המשחק נמצא (פתיחה, משחק בינוני, משחק סיום)
  • אם לשחקן יש את שני הבישופים, זה יקבל בונוס
  • אם השחקן טיל, קבל בונוס
  • משכונות מבודדות (משכונות בלי שום דבר סביבן) אינן טובות
  • משכפלות כפולות (שני משכונים באותו קובץ ללא פער בין ) לא טובים
  • כל 8 המשכונות אינו הכרחי דבר טוב ונענש (הם מבולבלים בלוח ומפריעים)
  • תסתכל על זה פונקציית הערכה נהדרת המשמשת גם היא
  • בישופים עם יותר משכונות באותו ריבוע צבע כמו הבישוף נענשים (הם לא כל כך טובים במצבים צפופים)
  • טרם מיושם, אך מתוכנן: אבירים מקבלים בונוס במצבים צפופים יותר

באחד מאותם נקודות, הזכרתי את 'שלב' המשחק (למשל פתיחה, משחק ביניים, משחק סיום), ואם ברצונך לכלול את זה במנוע שלך, כנראה שתיתקל באותה בעיה כמוני: אין קו ברור המפריד בין אלה. הפונקציה שלי שמחליטה באיזה שלב המשחק משתמשת בכמה דברים:

  • כמות החומר על הלוח (ברגע שכל קטע נהרג, זה מסמן את המשחק כלא בפתיחה)
  • מספר המהלכים (פחות מ -6 מהלכים מלאים הם הפתיחה, לא משנה מה)
  • תנועת המלכות (אם שתי המלכות הועברו, סמן את המשחק כמשחק בינוני)

התשובה הזו אולי הייתה ארוכה, מאוחרת ולא נושא, אך אני מקווה שהיא הועילה בכל מקרה.

#3
+5
Pablo S. Ocal
2014-09-21 02:53:40 UTC
view on stackexchange narkive permalink

אם אני מוסיף לתשובה מאת @Eve Freeman, הייתי מציע לחפש איך מנוע המחשבים הטוב ביותר בעולם, Stockfish, מעריך עמדה נתונה. מכיוון ש קוד המקור פתוח, תוכלו לעשות זאת בחינם. אני חושב שהקובץ עם פונקציית ההערכה שאתה מחפש הוא זה.

#4
+4
Chromatix
2019-07-01 04:48:45 UTC
view on stackexchange narkive permalink

באופן מפתיע, מתברר שמנוע מינימקס ישחק בצורה סבירה כאשר פונקציית ההערכה היא אקראית ; זה ידוע בתור אפקט Beale ונובע מהעיקרון שמיקומים שמעניקים לך יותר אפשרויות ויריבך פחות אפשרויות הם בדרך כלל חיוביים. דרך סבירה אחת לייצר הערכות אקראיות באופן עקבי ויעיל היא ליצור חשיש של Zobrist למיקום (באמצעות מקדמים שנבחרו באופן אקראי בתחילת המשחק), ולהפיק את ההערכה האקראית ישירות מה- hash.

בשעה בקצה השני של הסקאלה, AlphaZero ו- Leela עורכות הערכה מתוחכמת ביותר של כל מיקום שנחפש, באמצעות רשת עצבית גדולה . לא מעשי לתאר במונחים אנושיים אילו פונקציות מיישמת ברשת זו ביעילות, אך אין ספק שהיא יעילה יותר מתפקוד ההערכה של סטוקפיש. מאמר המחקר AlphaZero מצביע על כך שגישה זו עובדת בצורה הטובה ביותר עם חיפוש עץ במונטה קרלו ולא עם מינימקס.

אם, לעומת זאת, תרצה לפתח מנוע ניתוח שיעזור שחקנים אנושיים או פרשנים מבינים את הניואנסים של עמדה, אולי כדאי ליישם פונקציית הערכה קונבנציונאלית באמצעות ערכי חומר מבוססים ותורת העמדות . דוגמה טובה נותנת על ידי Inside Rebel של אד שרודר, המתעד את מאפייני העיצוב העיקריים של מנוע נחשב המשמש בכמה ממחשבי השחמט של מפיסטו. ייתכן שתרצה להשתמש במידה מסוימת של למידת מכונה כדי לקבוע את החשיבות היחסית של כל אלמנט בפונקציית ההערכה שלך, וכן לפרוץ אלמנטים אלה בנפרד להצגה בממשק משתמש.

#5
+3
A passerby
2015-09-23 16:46:39 UTC
view on stackexchange narkive permalink

אני חושב שמתכנתי שחמט נוטים לא לסמוך על הידע של שחקני שחמט חזקים בעת תכנון פונקציות ההערכה שלהם, אלא לנסות אלמנטים שונים ואז לבדוק אותם במשחקים מול מנועים אחרים ולהחליט מה לשמור. לארי קאופמן מדבר מעט על השקפותיו לגבי מהי הבנת האדם, אך נשמע כי גם ראגליך וגם דיילי היו מכווני תוצאות מאוד, ולא אימצו את רעיונותיו של קאופמן בסיטונאות. זאק ווגנר משווה את פונקציות ההערכה של ריבקה ופירות. אחד התחומים שבהם ייתכן שיבקה ייצג צעד קדימה היה שילוב טבלאות חוסר איזון מהותיות המבוססות על שילובים ספציפיים של חלקים. קאופמן כתב מאמר גם על כך.

http://www.top-5000.nl/ZW_Rybka_Fruit.pdf http://danheisman.home.comcast .net / ~ דנהייסמן / מאמרים / הערכה_של_חומר איזון.htm

#6
  0
techcraver
2015-01-10 11:27:18 UTC
view on stackexchange narkive permalink

קישור זה הוא נקודת המוצא הטובה ביותר IMHO. אני משתמש בזה כנקודת ההתחלה שלי לתוכנית השחמט שלי, &, למצוא את זה פשוט להבנה ושימושי.

https://chessprogramming.wikispaces.com/Simplified+evaluation+function

האם אתה יכול בבקשה להרחיב בקצרה על תוכן הקישור?
אתר ויקיספייס מושבת כעת. קישור מתוקן לביתו החדש: https://www.chessprogramming.org/Simplified_Evaluation_Function
#7
  0
jaxter
2016-10-21 21:20:08 UTC
view on stackexchange narkive permalink

בקצרה, הגישה הסטנדרטית לכוונון הפרמטרים של מנוע השחמט היא:

  1. הגדרת הפרמטרים
  2. תן לפרמטרים ערכים נומינליים (התחלה)
  3. הפעל את המנוע כדי לראות כיצד הוא פועל
  4. כוון את ערכי הפרמטר כדי לנסות לשפר את ביצועיו

ואז חזור על שלבים 3 ו -4 עד שתהיה הגעת למטרתך לביצועים.

הגישה המקובלת לעשות זאת היא להקים מעבדה בה מנועים מתמודדים בטורנירי מנועים. משתמשים במשחקים מרובים בהם המנוע משחק בשני הצבעים. הטורנירים העיקריים שמעניינים את עצמם כוללים הפעלת מנוע עם ערכת פרמטר A מול אותו מנוע עם ערך פרמטר B.

כפי שאתה בוודאי יכול לנחש, תוצאות מגישה זו תלויות במידה רבה ב:

  • הפרמטרים שנבחרו
  • אופן ציון הפרמטרים
  • כיצד משתנים ערכי הפרמטרים לאורך כל הבדיקה
  • אופן פעולת המנועים ( עומק רובדי מוגבל, זמן מוגבל, רגישות וכו ')

גישה זו גוזלת גם הרבה זמן.

עדכנית יותר ( וגישה חדשנית) פותחה בשנת 2010 על ידי חוקרים המשתמשים בטכניקות של אלגוריתם גנטי כדי a) לציין את הפרמטרים, וב) לכוון את ערכי הפרמטרים. החוקרים הפעילו תחילה מנוע עם סט ערכי פרמטרים מתחיל ונומינלי מול קבוצה של משחקי גרנד-מאסטר כדי לבדוק אם הוא יכול לבחור ביעילות את "המהלך הטוב ביותר". "המהלך הטוב ביותר" הוגדר כצעד שעשה הגרנד-מאסטר *. בכל מקום שלא הצליחה לעשות זאת תועד. לאחר מכן, נוסה ערכת ערך פרמטר נוספת, ונקבעו ביצועים יחסית לעומת הריצה הקודמת.

ואז נוסתה גישה פרוגרמטית ל שילוב ערכי הפרמטר תוך שימוש בעקרון ההישרדות של האלגוריתם הגנטי של "החזקים ביותר". כאן, "הכי טוב" פירושו זה שמייצר תפוקה התואמת ביותר את האידיאל. (במקרה זה גם משחק מילים על הטכניקה הסטטיסטית של רגרסיה של "הכי פחות ריבועים מתאימים", טכניקה המשמשת לשיפוט איכות הקירוב.)

רק לאחר שנמצאו פרמטרים של מנוע שיכולים לחקות א GM בצורה סבירה מתחיל שלב טורניר המנוע בפועל. בשלב זה שוב נקבעים ערכי ערכי פרמטר שונים זה מול זה, הפעם ישירות . נעשה שימוש בטכניקות לשיפור אלגוריתם גנטי כדי ליצור דורות טובים יותר של המנוע.

בפרויקט מחקר זה נעשה שימוש ב -36 פרמטרים, כולל כל הערכים החומריים של החלקים, ורבים מההערכה האסטרטגית הנפוצה יותר. קריטריונים, כמו משכונות לאחור, ריבועים חלשים, זוג בישופים וכו '. עם זאת, החוקרים הוסיפו כמה פרמטרים חדשים, כגון "לחץ המלך", "ערכי" ניידות עבור כל סוג של חתיכה, צריח על קובץ הסמוך למלך, צריח על קובץ פתוח למחצה, צריח שתוקף את המלך על א - / b- / g- / h- קובץ, הפרדה בין משכון עבר למלך המגן ועוד.

למרבה הצער, החוקרים לא מפרטים כיצד הגיעו לחבילת הפרמטרים הזו , ואילו פרמטרים חלופיים הם עשויים לבדוק ולדחות. יהיה זה סביר להניח שהם התחילו במערך גדול בהרבה, וקבעו (באמצעות ניסוי וטעייה) לאילו מהן הייתה ההשפעה הגדולה ביותר על הביצועים, ואילו מהם היו חסרי משמעות או נגזרים, וכך ניתן היה להוריד אותם.

אם זה נשמע כאילו זה יכול להיות שימושי, אתה יכול למצוא את המחקר כאן .

* אזהרה לגבי שלב הגישה שהחוקרים השתמשו בה הוא בסדר. במבואו ל הבנת מהלך השחמט לפי מהלך בחר ג'ון נון ב" ... משחקים נלחמים קשה בין סבתות גדולות ... "כדי להמחיש את הנושאים שלו. לאחר מכן הוא מוסיף:

הקוראים עשויים להיות מופתעים למדי לראות את מספר סימני השאלה המעטרים את המשחקים בספר זה. בוודאי, אתם חושבים, עם רק שלושים משחקים לבחירה, היה צריך להיות קל למצוא כמה משחקי סאונד. עם זאת, אני יכול להבטיח לך שזה לא היה. ... אפשר למצוא תקלה כמעט בכל משחק מורכב וקשה ... מעולם לא הרגשתי שהמשחק שלי היה כמעט מדויק לחלוטין, ולכן באופן אישי אני לא מוצא את הגילויים האלה מטרידים. עם זאת, חלקם עשויים להתקשות להודות ששחמט כפי שהוא משוחק על ידי בני אדם הוא פחות מדויק ממה שחשבו בעבר. פרמטרים של מנוע בכך שהם דורשים מהם לחקות מהלכים של Grandmaster עשויים להיות לקויים כי המשחק האנושי לקוי . למעשה, זה ידוע היטב ש מנועים כבר פועלים טוב יותר מבני אדם .

לכן, אולי גישה טובה יותר להגדרת הפרמטרים הראשוניים תהיה התאמת מנוע חדש מול מנוע מעולה קיים .

#8
  0
SmallChess
2017-04-19 06:47:57 UTC
view on stackexchange narkive permalink

יש אתר נחמד בכתובת:

https://hxim.github.io/Stockfish-Evaluation-Guide/

זה נותן לך מבוא על אופן הפעולה של פונקציות Stockfish.

enter image description here



שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...