משחק שחמט
-
אתה פיתחת? זה מרשים מאוד!
אכן. אני כתבתי את התוכנה.
למען האמת את מנוע החישוב של המהלכים לא אני פיתחתי, יש מנוע שחמט חזק שנכתב בשפת C, ואני השתמשתי בו (תוכל לראות ב-ProcessManager שיש תת תוכנה שרצה תחת התוכנה הראשית) בכל מהלך התוכנה שולחת לו את רצף המהלכים מתחילת המשחק והמנוע מחזיר את המהלך הכי טוב.
אבל הגרפיקה, הכללים של השחמט, המהלכים החוקיים - זה אני כתבתי.
תאמת שניסיתי לבנות מנוע שחמט עצמאי, אבל התייאשתי בגלל בעיות של ביצועים (לחישוב רק של 4 מהלכים לקח חצי דקה. הטכנולוגיה המועדפת בתוכנות שחמט היא בינה מלאכותית ולא חישוב יבש של כל המהלכים האפשריים. תחשבן שאם הממוצע של מהלכים אפשריים בכל תור הוא 25 מהלכים, עכשיו תעלה בחזקת 8 זה יוצא בערך 150 מיליארד מהלכים לניתוח. התוכנה לא עמדה בזה, בפרט שזה בטכנולוגיית NET. שגם ככה סובלת מבעיות ביצועים)
דרך אגב, המנוע הנ"ל הוא חזק מאוד, כמעט אין אפשרות לנצח אותו, אפילו ברמה נמוכה, ואפילו ברמה 1. כשנתתי לו לשחק מול עצמו, תמיד זה נגמר בתיקו.
-
בפרט שזה בטכנולוגיית NET. שגם ככה סובלת מבעיות ביצועים
דוקא חישובים מתמטיים טהורים כמו אלו, נראה לי שה-JIT של דוטנט יכול מאוד למטב (לפעמים עם עזרת המתכנת שיודע איך לכתוב את זה בצורה נבונה שלא יפריע למיטובים)
אבל אני מסכים שבניית מנוע שחמט לבד הוא פרוייקט מדי גדול להצליח בצורה שיתחיל להתחרות במנועים הטובים -
עכשיו תעלה בחזקת 8 זה יוצא בערך 150 מיליארד מהלכים לניתוח. התוכנה לא עמדה בזה, בפרט שזה בטכנולוגיית NET. שגם ככה סובלת מבעיות ביצועים)
גם כחול עמוק לא חישבה את כל האפשרויות אלא רק
בסיס הנתונים של סיום המשחק כלל הרבה מצבי סיום עם שישה כלים ואת כל מצבי הסיום עם חמישה או פחות כלים.
ואם כל זה היא ניצחה את אלוף העולם כך שאתה לא צריך לשאוף להגיע ליותר משם.
-
-
@משתמש-תמים אמר במשחק שחמט:
גם כחול עמוק לא חישבה את כל האפשרויות אלא רק
אני מסכים אתך לגמרי שלא הגיוני ש'כחול עמוק' חישבה את כל המהלכים האלו (אגב, מזיכרוני, כחול עמוק מחשבת 10 צעדים קדימה..), וזה בדיוק הסיבה שהלוגיקה המועדפת לפיתוח מנוע שחמט צריכה להיות משולבת עם בינה מלאכותית.
-
@קומפיונט פשוט מדהים!
אגב משום מה בפתיחה/סגירה מופיעה חלונית "שגיאה"
למרות שבפועל התוכנה נפתחת/נסגרת תקין,
ונפתח קובץ טקסט עם הלוג הבא:System.UnauthorizedAccessException: Access to the path '\\Mac\Home\Downloads\Chess\stockfish_15_x64_popcnt.exe' is denied. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.File.InternalDelete(String path, Boolean checkHost) at System.Windows.Application.OnExit(ExitEventArgs e) at System.Windows.Application.DoShutdown() at System.Windows.Application.ShutdownImpl() at System.Windows.Application.ShutdownCallback(Object arg) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.DispatcherOperation.InvokeImpl() at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state) at System.Windows.Threading.DispatcherOperation.Invoke() at System.Windows.Threading.Dispatcher.ProcessQueue() at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) at System.Windows.Application.RunDispatcher(Object ignore) at System.Windows.Application.RunInternal(Window window) at Chess.App.Main()
מוכר לך?
-
@צדיק-תמים תעתיק את זה לכונן של ווינדוס ונסה שוב...
כנ"ל
System.UnauthorizedAccessException: Access to the path 'C:\Chess\stockfish_15_x64_popcnt.exe' is denied. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.File.InternalDelete(String path, Boolean checkHost) at System.Windows.Application.OnExit(ExitEventArgs e) at System.Windows.Application.DoShutdown() at System.Windows.Application.ShutdownImpl() at System.Windows.Application.ShutdownCallback(Object arg) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.DispatcherOperation.InvokeImpl() at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state) at System.Windows.Threading.DispatcherOperation.Invoke() at System.Windows.Threading.Dispatcher.ProcessQueue() at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) at System.Windows.Application.RunDispatcher(Object ignore) at System.Windows.Application.RunInternal(Window window) at Chess.App.Main()
-
אולי אפשר להגביל את זמן החשיבה שלו ברמות הנמוכות, באופן שיתאים למחשבים המהירים של היום.
אני מעלה גרסה עם שליטה על הרמה בשני פרמטרים:
הנה הקישור: ChessWithDepthאפשרות אחת זה עומק חישוב - כמה רובדים קדימה לחשב,
אפשרות שניה זה הקבצת הזמן המקסימאלי שהמנוע יכול לחשוב (באלפית השנייה). -
@צדיק-תמים
כשהתוכנה עולה היא יוצרת קובץ בשם 'stockfish_15_x64_popcnt.exe' במיקום של התוכנה ובסיום היא מוחקת אותו,הבעיה אצלך היא שמשום מה התוכנה לא מצליחה למחוק את הקובץ ביציאה בגלל הגבלת הרשאות, יותר מזה אני לא יכול לדעת..
תנסה להריץ כמנהל ותראה אם עדין יש את הבעיה