21
1 עבודת בית מספר2 מערכים, פונקציות ובעיית הסיפוק הבוליאני מבוא למדעי המחשב, סמסטר א' תשע" ח המחלקה למדעי המחשב, אוניברסיטת בן- גוריון בנגב

2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

1

2עבודת בית מספר פונקציות ובעיית הסיפוק הבוליאני, מערכים

ח"תשע' סמסטר א, מבוא למדעי המחשב גוריון בנגב-אוניברסיטת בן, המחלקה למדעי המחשב

Page 2: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

2

ח"תשע' סמסטר א –מבוא למדעי המחשב

פונקציות ובעיית הסיפוק הבוליאני, מערכים: 2עבודת בית מספר

: צוות העבודה

שמיכאל קודי: מרצה אחראי

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

9.11.2017 :תאריך פרסום

בצהריים ..:12בשעה 1.12.2.10. :תאריך הגשה

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

. חשובים נוספים במדעי המחשב

The: או באנגלית, "בעיית הסיפוק הבוליאני"רדוקציה לידי -על ת שפותרת מופעים של בעיית הסדוקונכתוב תכני

Boolean Satisfaction Problem (SAT) .פותרן של בעיית הסיפוק הבוליאני"נשתמש ב "(SAT Solver).

Page 3: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

3

:הוראות מקדימות

ביתהגשת עבודות

כל ודאו שאתם מבינים את . קראו את העבודה מתחילתה ועד סופה לפני שאתם מתחילים לפתור אותה .1

מצריכות ואחרות, קל יותרהפתרון של חלק מהמשימות :רמת הקושי של המשימות אינה אחידה .ותמשימה

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

הערה במקום המתאים בקוד את כ הוסיףיש ל, אתם מסתמכים על עובדות מתמטיות שלא הוצגו בשיעורים

(.כגון ספר או אתר)את המקור והמתמטית העובדה ציטוט

. (Submission System)להגיש את העבודה יש להירשם למערכת ההגשות כדי. עבודה זו תוגש ביחידים .2

קחו בחשבון כי הגשה באיחור )טרם הגשת העבודה , ההגשות מומלץ לבצע כבר עכשיואת הרישום למערכת

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

מציין את < n>כאשר ,Task<n><Description>.javaעם שמות כגון Javaבצי ולעבודה מצורפים ק .3

. (5מתאים למשימה מספר Task5Verify.javaבשם Javaקובץ , לדוגמה) מספר המשימה המתאימה לקובץ

Java-בצי הוצרו תיקייה חדשה והעתיקו את ק .1-4 תומישמל TasksArrays.java םשב ץבוק ףרוצמ ףסונב

ZIPמכווצים כקובץ , ולהגישם כפתרון אלו בהתאם למפורט בתרגילהקבצים את העליכם לערוך . לתוכה

להגיש קבצים אין. אין לשנות את שמות הקבצים. Java-הבצי ועליכם להגיש רק את ק: שימו לב .יחיד

שתגישו יכולים להכיל קבצים ה, בנוסף. באנגלית בלבדאך ,כרצונכםיכול להיות ZIP-שם קובץ ה. נוספים

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

.לא יתקבל..( 'יוונית וכד ,בעברית

.Submission System-יש להגיש ב ZIP-את קובץ ה .לא ייבדקושלא על פי הנחיות אלו קבצים שיוגשו .4

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

בדיקת עבודות הבית

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

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

או חסרים, מיותרים - או כל תו אחר סימני פיסוק, רווחים, כולל שורות)דרישות המופיעות בעבודה ה

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

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

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

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

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

.העבודה

Page 4: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

4

עזרה והנחיה

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

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

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

.צוות הקורס עובר על השאלות ונותן מענה במקרה הצורך. לחבריכם לכיתה

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

.באתר הקורס

הערות ספציפיות לעבודת בית זו

ואינו ( נקודות .1)הניקוד לכל משימה שווה . 110הוא משימות וסך הנקודות המקסימלי 11בעבודה זו .9

.מצביע על קושי המשימה

. (כולל) 4וכן עד תרגול , (כולל) 8ותר להשתמש בידע שנלמד עד הרצאה מבעבודה זו .11

יושר אקדמי

,זוהי העתקה -עם קוד זהה או אפילו דומה עבודותשתי מוגשות אם . יחידיםההגשה היא ב! הימנעו מהעתקות

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

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

.במערכת ההגשות( עבור עצמכם)קבוצת הגשה

Page 5: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

5

מבוא לסודוקו : 1חלק

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

עמודות 9, שורות 9הקלאסי יש בלוח .נקראים רמזים התאים שבהם נתונים מספרים. ריקים תאים והאחרים הם 9-ל

.כמתואר באיור בהמשך, בלוקים בגודל 9-ו

כך ,9-ל 1שערכם בין שלמים יש למלא בכל התאים הריקים שבלוח מספריםשל בעיית הסודוקו לפתור מופע כדי

.כל הערכים יהיו שונים זה מזה ,בלוקבכל עמודה ובכל , שבכל שורה

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

: (ה –נקרא לתנאים אלו בהמשך תנאים א ) הבאים

9-ל 1בין בתאים הם שלמים וערכם כל הערכים .א

ם שונים זה מזהיכל הערכ, בכל שורה של הלוח .ב

ם שונים זה מזהיכל הערכ, בכל עמודה של הלוח .ג

ם שונים זה מזהיכל הערכ, בכל בלוק של הלוח .ד

.התואמים של הפתרוןכל הרמזים הנתונים במופע של הבעיה מופיעים בתאים .ה

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

.ים מודגשיםוהבלוקים מופרדים בקו .בשחור

חלק שבו גודל ב נתון כלוח מופע של בעיית הסודוקו מסדר: בעבודה זו נעסוק בבעיית הסודוקו הכללית

והלוח הקלאסי הוא בגודל 3ית היא מסדר בעיית הסודוקו הקלאס .n-ל 1בין שלמים מכילים ערכים (הרמזים) מהתאים

.n-ל 1הערכים שבתאים הם בין כאשר , ה –התנאים א נדרש לקיים את פתרון לבעיית הסודוקו מסדר .

Page 6: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

6

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

.ים מודגשיםומופרדים בקו

אווה'ייצוג מופע סודוקו בג

ממדי של מספרים שלמים-באמצעות מערך דו Java-ייוצג ב של מופע לבעיית הסודוקו מסדר פתרון

int[][] board בכל תא ב. מגודל-board ל 1יופיע ערך בין-n ה מתקיימים-כך שתנאי הפתרון א.

:(מודגשיםערכי הרמזים ) ייוצג באופן הבא( מימין)הפתרון של המופע באיור האחרון : דוגמה

int[][] board= {{2, 1, 4, 3},

{3, 4, 1, 2},

{4, 2, 3, 1},

{1, 3, 2, 4}} ;

, בו נתון הערך של, int sqrtNבאמצעות מספר שלם Java-ייוצג ב של בעיית הסודוקו מסדר מופע

הם מערכים hints המערך איברי. הרמזים בו נתוניםש int[][] hintsממדי של מספרים שלמים -ומערך דו

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

נוכל לתאר מופע .valueשל הלוח מופיע הערך (i, j) -אז במיקום ה hints[k] = {i, j, value}אם

.המערך הריקהוא hintsללא רמזים כאשר

:באופן הבא Java-ייוצג ב( משמאל)המופע באיור האחרון : דוגמה

int sqrtN = 2 ;

int[][] hints = {{0,0,2}, {1,2,1}, {2,1,2}, {3,3,4}}

מופיע הערך (2,1)בתא , 1מופיע הערך (1,2)בתא , 2מופיע הערך (0,0)כך שבתא , 2מדובר במופע מסדר , כלומר

.שאר התאים ריקים .4מופיע הערך (3,3)ובתא 2

3

1 3

3 1

1 4 3

4 4

2

2

Page 7: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

7

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

.בעיית הסודוקומופע לפתרון חוקי של

:1משימה

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

:TasksArrays.javaבקובץ

public static boolean isAllDiff (int[] array)

.nullאינו arrayיש להניח כי . הם מספרים שונים זה מזה arrayכי כל ערכי המערך הפונקציה לוודאעל

:דוגמאות

int[] array1 = {1,9,3,6} ;

System.out.println(isAllDiff (array1)); // true ;

int[] array2 = {1,4,3,5,1,6} ;

System.out.println(isAllDiff (array2)); // false ;

int[] array3 = {} ;

System.out.println(isAllDiff (array3)); // true ;

:2משימה

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

:TasksArrays.javaהשלימו את הפונקציה הבאה בקובץ . בטווח נתון

public static boolean isMatrixBetween(int[][] matrix, int n, int min, int max)

-ל minוערכיו הם בין , nמערכים באורך nא מערך המכיל הו matrix אם ורק אם trueלהחזיר ערך על הפונקציה

max (כולל.) ערך יש להחזיר, אין להניח דבר על תקינות הקלט false תקיןאינו הקלט אם.

:דוגמאות

System.out.println(isMatrixBetween(null, 4, 1, 5)); // false

int[][] matrix1 = {{1,2,3},

{1,2,3},

{1,2,3}};

System.out.println(isMatrixBetween(matrix1, 3, -2, 9)); // true

int[][] matrix2 = {{1,2,3},

null,

{1,2,3}};

Page 8: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

8

System.out.println(isMatrixBetween(matrix2, 3, -2, 9)); // false

int[][] matrix3 = { {1,2,3},

{10,11,12},

{1,2,3}};

System.out.println(isMatrixBetween(matrix3, 3, -2, 9)); // false

:3משימה

,תואם ממדי-מערך דולחשב נרצה , של מטריצה" שורות"הם האיבריו ש, ממדי של מספרים שלמים-בהינתן מערך דו

:TasksArraysהשלימו את הפונקציה הבאה בקובץ . המטריצהשל " עמודות"ה שאיבריו הם

public static int[][] columns(int[][] matrix)

מייצג matrix[0], רכלומ, ממדו הראשון מייצג שורות של מטריצהש matrixממדי -הפונקציה מקבלת מערך דו

על הפונקציה . מייצג את השורה השנייה של המטריצה וכן הלאה matrix[1], את השורה העליונה של המטריצה

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

matrixCols הוא המערך שחוזר מקריאה לפונקציהcolumns(matrix) אזיmatrixCols[0] היא

.וכן הלאה matrixהעמודה השנייה משמאל של היא matrix ,matrixCols[1]העמודה השמאלית של

. מייצג מטריצה מגודל ו nullאינו matrixיש להניח כי הקלט

:דוגמאות

int[][] matrix1 = {{1,2,3},

{4,5,6},

{7,8,9}};

int[][] matCols1 = columns (matrix1) ;

/*

* matCols1 = {{1, 4, 7},

* {2, 5, 8},

* {3, 6, 9}}

*/

:4משימה

הבלוקים ממדי של -מערך דו לחשבנרצה , טריצהשהם השורות של מ, ממדי של מספרים שלמים-בהינתן מערך דו

:TasksArraysהשלימו את הפונקציה הבאה בקובץ . המתאימים במטריצה

public static int[][] blocks(int[][] matrix, int sqrtN)

המייצג את sqrtNומספר אשר מייצג מטריצה מגודל matrixממדי -ך דוהפונקציה מקבלת מער

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

nullאינה matrixוכי , יש להניח כי .מעלה למטהשמאל לימין ומלמסודרים מ matrixהבלוקים של

. ומייצגת מטריצה מגודל

Page 9: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

9

:דוגמה

int[][] matrix1 = {{11,12,13,14},

{15,16,17,18},

{19,20,21,22},

{23,24,25,26}} ;

int[][] matBlocks1 = blocks (matrix1, 2) ;

/*

* matBlocks1 = {{11, 12, 15, 16},

* {13, 14, 17, 18},

* {19, 20, 23, 24},

* {21, 22, 25, 26}}

*/

:5משימה

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

:Task5Verifyהשלימו את הפונקציה הבאה בקובץ . ה –תנאים א

public static boolean isSolution(int sqrtN, int[][] hints, int[][] board)

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

מייצג פתרון חוקי למופע boardאם trueעל הפונקציה להחזיר . boardי המערך "המיוצג ע, הפונקציה מקבלת פתרון

אחרת הפונקציה תחזיר ערך , ה –מקיים את תנאים א boardאם trueיש להחזיר ,כלומר; hints-ו sqrtNי "המיוצג ע

false . יש להניח כיsqrtN וכי , שלילי-מספר איהואhints ים סשל מספרים המייצגים אינדק מערך של שלשותהוא

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

.יש לזרוק חריגה, -ל 1ערכים בין עם מייצג מטריצה מגודל אינו

:דוגמה

int[][] hints1 = {{0,0,2}, {1,2,1}, {2,1,2}, {3,3,4}} ;

int[][] board1 = {{2, 1, 4, 3},

{3, 4, 1, 2},

{4, 2, 3, 1},

{1, 3, 2, 4}} ;

System.out.println(isSolution(2, hints1, board1)); // true

System.out.println(isSolution(3, hints1, board1)); // exception

int[][] hints2 = {{0,0,2}, {1,2,1}, {2,1,2} } ;

int[][] board2 = {{2, 1, 1, 3},

{3, 4, 1, 2},

{4, 3, 2, 1},

{1, 3, 2, 1}} ;

System.out.println(isSolution(2, hints2, board2)); // false

Page 10: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

10

בעיית הסיפוק הבוליאני: 2חלק

תחשיב הפסוקים לגבי תזכורת

. םשל ליטרלי"( או)"דיסיונקציה היאפסוקית . של פסוקיות"( וגם)"קוניונקציה היא CNFבצורת נוסחה בוליאנית

אווה לבין אלו 'בכדי להימנע מבלבול בין המשתנים של ג. ה של משתנה בוליאניאו שליל בוליאני ליטרל הוא משתנה

.CNFנדייק ונקרא משתני CNF-למשתנים של ה, CNF-של ה

. falseאו trueאשר מתאימה לכל משתנה ערך (מתמטית)השמה היא פונקציה

אם השמה מספקת פסוקית. ספקת אם היא מספקת את כל הפסוקיותמהשמה היא , CNFבצורת בוליאנית נוסחה עבור

וההשמה מציבה הוא מהצורה הליטרל :השמה מספקת ליטרל אם. הליטרלים בפסוקיתאחד היא מספקת לפחות את

. CNF-למשתנה ה falseוההשמה מציבה ערך הוא מהצורה הליטרל ש או, CNF-למשתנה ה trueערך

?קתהאם קיימת עבורה השמה מספ, נתן נוסחה בוליאניתיבה: עוסקת בשאלה בעיית הסיפוק הבוליאני

:Java-ייצוג של נוסחאות בלגבי התזכורת

. :nועד 1-תמיד יהיו ממוספרים ברצף מ CNF-ה משתני, אווה'בייצוג של ג

באמצעות המספר אווה 'בגנייצג את הליטרלi , נייצג באמצעות המספר ואת הליטרל .

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

:אווה באמצעות המערך'נייצג בג הפסוקית

int[] clause = {1,4,-17,6,4,19,-3}

ת הנוסחאת-CNF את הנוסחה, למשל. מדימ-נייצג באמצעות מערך דו

-ואווה באמצעות המערך הד'נייצג בג

:מדימ

int[][] formula = {{1,3,5}, {2,4,-3},{-5,8,-12}}

:Java-ב השמהייצוג של ה לגביתזכורת

כאשר , באורך assignmentבאמצעות מערך בוליאני CNF-ה נייצג השמה למשתני

assignment[i] ה היא הערך של משתנה-CNF i איבר שימו לב שבייצוג זה אין משמעות ל. תחת ההשמה הנתונה

assignment[0] ,את ההשמה , למשל .הראשון במערך

Page 11: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

11

יש לשים לב . boolean[] assignment = {true, false, false, true, true} אווה באמצעות המערך'ייצג בגנוכל ל

.באיבר הראשוןשאין משמעות לערך

.ולהשתמש בפותרן לבעיית הספיקות cnf-אילוצים לכמה של עבודה זו היא לקודד 2מטרת חלק

:6משימה

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

את תואמות שלה המספקות ההשמות קבוצת אם CNFקבוצה של משתני נוסחה מבטאת אילוץ על . CNFמשתני

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

.בהם ניתן לספק את האילוץשתואמת בדיוק את האופנים

:CNF-נוסחאת ה, -ואילוץ שאומר ש עבור משתנים בוליאנים : דוגמה

:והן, מתוכן רק שתי השמות מספקות, זאת משום שלנוסחה לעיל ארבע השמות אפשריות. מבטאת את האילוץ

. -ו

At Least One :6..משימה

אחד מתוך קבוצה של משתנים CNFמבטאת אילוץ שאומר שלפחות משתנה אשר CNFבמשימה זו נבנה נוסחת

:Task6Cnfבקובץ השלימו את הגדרת הפונקציה. trueנתונים מקבל את הערך

public static int[][] atLeastOne(int[] vars)

ת שלה ומספקה ותשמהה קבוצתש CNFומחזירה נוסחת CNF משתני( של שמות)הפונקציה מקבלת מערך של

. במערך הקלטש CNF-ה משתנימ אחדלפחות ל trueערך בהם ניתן לתת שאת כל האופנים תואמת

אחד נוסחה שאומרת שלפחות , int[] vars = {2,5,7} ( אווה'בייצוג של ג) CNF בוצת משתניבהינתן ק: הדרכה

את מקבל -או ש, trueערך מקבל -או ש, trueערך מקבל -או ש: למעשה אומרת ,trueהמשתנים מקבל ערך

.והכלילו לקלט כלשהו CNFרישמו נוסחה זו בצורת . trueהערך

.תקין קלטשהלהניח ישבמשימה זו

At Most One :6..משימה

אחד מתוך קבוצה של משתנים CNFמבטאת אילוץ שאומר שלכל היותר משתנה אשר CNFבמשימה זו נבנה נוסחת

:Task6Cnfבקובץ הפונקציההשלימו את הגדרת . trueנתונים מקבל את הערך

public static int[][] atMostOne(int[] vars)

ת שלה ומספקה ותשמהה קבוצתש CNFומחזירה נוסחת CNF משתני( של שמות)הפונקציה מקבלת מערך של

. במערך הקלטש CNF-ה משתנימ ללכל היותר אחד trueערך בהם ניתן לתת שאת כל האופנים תואמת

אחד המשתנים נוסחה שאומרת ש ,int[] vars = {2,5,7} (אווה'בייצוג של ג) CNF קבוצת משתניבהינתן : הדרכה

גם לא ו, trueאת הערך שניהם מקבלים המשתנים שזוג לא נכון: למעשה אומרת ,trueערך מקבלהיותר לכל

Page 12: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

12

את שניהם מקבלים המשתנים שזוג גם לא יתכןו, trueאת הערך שניהם מקבלים המשתנים שזוג נכון

.והכלילו לקלט כלשהו CNFרישמו נוסחה זו בצורת . trueהערך

.תקין קלטשהלהניח ישבמשימה זו

Exactly One :6..משימה

אחד מתוך קבוצה של משתנים CNFמבטאת אילוץ שאומר שבדיוק משתנה אשר CNFבמשימה זו נבנה נוסחת

:Task6Cnfבקובץ השלימו את הגדרת הפונקציה. trueנתונים מקבל את הערך

public static int[][] exactlyOne(int[] varNames)

ת שלה ומספקה ותשמהה קבוצתש CNFומחזירה נוסחת CNF משתני( של שמות)הפונקציה מקבלת מערך של

.הקלט במערךש CNF-ה משתנימ לבדיוק אחד trueערך בהם ניתן לתת שאת כל האופנים תואמת

אז בדיוק אחד ,trueמקבל ערך המשתניםלכל היותר אחד גם ו ,trueמקבל ערך אחד המשתניםאם לפחות : הדרכה

.true מקבל ערך המשתנים

.שהקלט תקיןלהניח ישמשימה זו ב

הבוליאני הסיפוקהשימוש בפותרן לבעיית

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

המצורף לקבצי ExamplesTask6ExactlyOne.javaבנספח ובקובץ exactlyOneדוגמאות לאילוץ כמה למצוא

.העבודה

Page 13: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

13

רדוקציה מבעיית הסודוקו לבעיית הסיפוק : 3חלק

הבוליאני

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

בין משתני ( מיפוי)יצור התאמה נרצה ל, בהינתן מופע של בעיית הסודוקו מסדר (:Mapping)מיפוי .1

. אשר מקודדת את המופע CNF-ההמופע לבין המשתנים שיופיעו בנוסחת

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

עבור לוח סודוקו : הלדוגמ. (i,j)-מופיע בתא ה אם ורק אם בפתרון למופע הערך trueיקבל את הערך

אם ורק אם נמצא פתרון כך trueיקבל ערך המשתנה ולמשל ,משתני מופע יהיו 2מסדר

. של לוח הסודוקו מופיע הערך (0,2)-שבתא ה

,2עבור לוח סודוקו מסדר : הלדוגמ . הם מספרים שלמים CNF-משתני ה( שמות: )CNF-משתני ה

. משתנים בוליאניים שהשמות שלהם הם נגדיר

התואמים המשתנים שמות את . CNF-ן משתני היבמשימת המיפוי נגדיר התאמה בין משתני המופע לב: פויימ

" טבלת המשתנים"אשר ייקרא , גודל ממדי מ-במערך תלת נחשב ונתחזק למשתני המופע

(map).

ההשמכל כך ש, CNFנוסחת יש להגדיר CNFלאחר מיפוי משתני המופע למשתני (:Encode) ממיר קלט .2

משתנה להתואם CNF-משתנה היש לאלץ את , כלומר .לפתרון חוקי של המופע תתאיםמספקת של הנוסחה

. -בתא ה בהשמה מספקת אם ורק אם בפתרון למופע מופיע הערך trueלהיות

י נש ייתכנו ,2בשלב שנוצר CNF-לאחר הפעלת פותרן לבעיית הספיקות על ה (:Decode) ממיר פלט .3

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

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

.(לתרגם חזרה

:האיור הבא ממחיש את שלושת השלבים

CNF-מיפוי משתני המופע למשתני ה1

2 3

פלטממיר פתרון מופע

SATפותרן ממיר קלט השמה מספקת CNFנוסחת

טבלת משתנים

Page 14: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

14

(מיפוי המשתנים: 1שלב ) :0משימה

:0.1משימה

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

שם המשתנה יהיה .Java-המתאים לו ב CNF-נרצה לחשב את שם משתנה ה, מופע של בעיית סודוקו מסדר

: לפי הנוסחה( בעבודה זו)יחושב -שם המשתנה המתאים ל, במקרה של בעיית הסודוקו . -ל 1מספר בין

:Task7Mapהשלימו את הגדרת הפונקציה הבאה בקובץ .

public static int varName(int i, int j, int k, int n)

לפי n-ו i,j,k-ומחזירה את שם המשתנה המתאים ל ומספר מספרים ה שלקבלת כקלט שלשהפונקציה מ

. כלומר , יש להניח כי הקלט תקין .הנוסחה המתוארת מעלה

:0.2משימה

. המגדירים את שם המשתנה את שלשת המספרים לחשבנרצה nומספר CNFבהינתן שם משתנה

(:varName-זו הפונקציה ההופכית ל) Task7Mapהשלימו את הגדרת הפונקציה הבאה בקובץ

public static int[] nameToIndex(int x, int n)

-כך ש {i,j,k}ומחזירה מערך בעל שלושה איברים nומספר xאשר מקבלת כקלט שם משתנה

x == varName(i,j,k,n) .כלומר , יש להניח כי הקלט תקין .

:דוגמה

int n = 9;

int x = varName(3,4,5,n); // x== 9^2 * 3 + 9 * 4 + 5 + 1 == 282

int[] triplet = nameToIndex(x,9); // triplet == {3,4,5}

:0.3משימה

:Task7Mapהשלימו את הגדרת הפונקציה הבאה בקובץ

public static int[][][] varsMap(int n)

ממדי -מערך תלתזהו . את טבלת המשתנים המתאימה למופע מסדר ומחזירה nשלילי -אשר מקבלת כקלט מספר אי

לפי המייצג את המשתנה CNF-המופיע שם משתנה המערך של (i,j,k)-כך שבמיקום ה מגודל

.מספר שלם כי ,כלומר. יש להניח כי הקלט תקין. 7.1הנוסחה הנתונה בסעיף

:דוגמה

int n = 4;

int[][][] map = varsMap(n) ;

Page 15: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

15

/*

* map =

* [[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]],

* [[17, 18, 19, 20], [21, 22, 23, 24], [25, 26, 27, 28], [29, 30, 31, 32]],

* [[33, 34, 35, 36], [37, 38, 39, 40], [41, 42, 43, 44], [45, 46, 47, 48]],

* [[49, 50, 51, 52], [53, 54, 55, 56], [57, 58, 59, 60], [61, 62, 63, 64]]]

*/

(ממיר קלט: 2שלב ) :8משימה

באופן כזה המופע נרצה לאלץ את המשתנה, עם רמזים בהינתן מופע של בעיית הסודוקו מסדר

בהשמה true ערך יקבל -נרצה ש, כלומר. של הפתרון מופיע הערך (i,j)-שהמשתנה יציין אם בתא ה

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

.0במשימה התואמים כפי שהוגדרו CNF-ה

טבלת המשתנים המתקבלת מקריאה לפונקציה היא mapונניח כי , כלומר , נתמקד במקרה בו

varsMap(4) .

משתנים בוליאניים 4אלו שמות של . map[i][j] = {k1, k2, k3, k4}-נניח ש: אילוצים על התאים

יופיע בתא אז, כלומר , בהשמה מספקת trueיקבל ערך k1אם . (i,j)המציינים את הערך בתא

-נרצה לבטא ב. הלאה ךוכ, 2יופיע הערך בתא אז , כלומר , trueיקבל ערך k2אם . 1הערך

CNF שבדיוק אחד המשתנים באת העובדה-map[i][j] מקבל ערךtrue .

? שונים זה מזהשל המטריצה האילוץ המגדיר כי ערכי השורה הראשונה ,למשל ,ראהיכיצד י: אילוצים על השורות

תא מגדיר את הערך הנמצא ב map[0][0]כאשר . map[0]-הראשונה נמצאים בהמשתנים המגדירים את ערכי השורה

: באיור. הלאה וכך ,שורה הראשונהתא השני של המגדיר את הערך ב map[0][1], הראשון של השורה הראשונה

-ת משתני הבאמצע מופיעים שמו, שורה הראשונהלהמתאימים שמאל באיור מופיעים התאים בטבלת המשתנים בצד

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

בדיוק אחד מהם יהיה , 2-בדיוק אחד מהם יהיה שווה ל, 1-יש לדרוש כי בדיוק אחד מהם יהיה שווה ל ,שונים זה מזה

יהיה כי מבין ,למשל ,יש לדרוש, כלומר. 4-ובדיוק אחד מהם יהיה שווה ל 3-שווה ל

.המטריצהכל שורה של ם למימשתנים המתאייש להוסיף אילוצים כאלו ל. trueבדיוק משתנה אחד אשר יקבל ערך

map[0][0]

map[0][1]

map[0][3]

map[0][2]

Page 16: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

16

יש להוסיף אילוצים , בנוסף. עמודה ובלוק של טבלת המשתנים, אלו לכל שורהכיש להוסיף אילוצים : שאר האילוצים

.המחייבים תאים בהם מופיע רמז לקבל את הערך של הרמז

:Task8Encodeהשלימו את הגדרת הפונקציה בקובץ

public static void encode(int sqrtN, int[][] hints, int[][][] map)

קציה להוסיף על הפונ. mapוטבלת משתנים עם רמזים הפונקציה מקבלת מופע לבעיית הסודוקו מסדר

mapמספקת למשתני כך שהשמה, את הפסוקיות המתאימות (דרך הממשק המתואר בנספח)הספיקות לבעיית לפותרן

מספר טבעי הוא sqrtN ,כלומר; יש להניח כי הקלט תקין. hints-ו sqrtNי "חוקי של המופע הנתון ע ןלפתרו םתאית

י קריאה "טבלת משתנים שהתקבלה ע map-ו (5בדומה להנחות של משימה ) מערך של שלשות hints, 1-גדול מ

(.1אפשר לקבל השראה מהפונקציות שהוגדרו בחלק : רמז)מומלץ להגדיר פונקציות עזר . varsMapלפונקציה

(ממיר פלט: 3שלב ) :9משימה

פתרון למופע מחשבופענח את ההשמה מ (Decode)ממיר הפלט , וטבלת המשתנים CNF-בהינתן השמה למשתני ה

.הסודוקו

:9.1משימה

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

:Task9Decodeהבאה בקובץ

public static int cellValue(int[][][] map, int i, int j, boolean[] assignment)

ובנוסף הפונקציה , varsMapהמתקבלת כתוצאה מקריאה לפונקציה mapהפונקציה מקבלת את טבלת המשתנים

על הפונקציה להחזיר . map-למשתנים ב assignmentוהשמה (i,j)י שני אינדקסים "מקבלת מיקום בלוח המיוצג ע

ההשמה אם . assignmentוההשמה mapטבלת המשתנים לפיכפי שיופיע בפתרון ,(i,j)-ה לתא את הערך המתאים

.אז יש לזרוק חריגה, לאף אחד מהמשתנים התואמים למשתני המופע trueערך אינה נותנת assignment -ב

assignment-ו, varsMap-י קריאה ל"התקבל ע map, אינדקסים חוקיים j-ו iכי ,כלומר; ניתן להניח כי הקלט תקין

. מכילה השמה לכל המשתנים

:9.2משימה

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

:Task9Decodeבקובץ

public static int[][] mapToBoard(int[][][] map, int n, boolean[] assignment)

על הפונקציה להחזיר מטריצה . map-למשתנים ב assignmentוהשמה mapנים המשתטבלת מקבלת את הפונקציה

board כך ש בגודל-board[i][j] בתא מכיל את הערך המפוענח(i,j). כלומר , יש להניח כי הקלט תקיןn הוא

השמה מלאה היא assignment-ו varsMap(n)-מערך שהתקבל כתוצאה מקריאה להוא map, 1-מספר חיובי גדול מ

. map-המופיעים ב CNF-למשתני ה

Page 17: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

17

( קיים פתרון) :.1משימה

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

. הבוליאנית

:Task10Solveהשלימו את הגדרת הפונקציה הבאה בקובץ

public static int[][] solve(int sqrtN, int[][] hints)

:על הפונקציה. עם רמזים הפונקציה מקבלת כקלט מופע של בעיית הסודוקו מסדר

טבלת משתנים מתאימה למופעלייצר

לאתחל פותרן לבעיית הספיקות

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

להפעיל את הפותרן

אם מתקבלת השמה מספקת

o יש לפענח את ההשמה המספקת לפתרוןboard

o יש לוודא כיboard פתרון חוקי למופע שקיבלתם הוא(י קריאה ל"ע-isSolution 5ממשימה)

o אםboard יש להחזיר את ,פתרון חוקיהואboard

o שמציינת שהפתרון אינו חוקי יש לזרוק חריגה ,אחרת

אם אין השמה מספקת יש להחזירnull

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

.ניתן למצוא בנספח לעבודה זו

( יחיד קיים פתרון: )11משימה

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

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

:Task11Uniqueהשלימו את הגדרת הפונקציה הבאה בקובץ

public static int[][] solveUnique(int sqrtN, int[][] hints)

Page 18: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

18

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

חלה אם . nullיש להחזיר ,ישנם שני פתרונותאם . אם ורק אם יש לו פתרון יחיד -ו י "למופע הנתון ע

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

Page 19: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

19

שימוש בפותרן לבעיית הספיקות: נספח

ולמקמו במחשב באותה ( 2בתיקייה של עבודת הבית מספר )מאתר הקורס SATSolver.java הקובץ יש להוריד את

. אין לשנות את הקובץ הזה ואין להגישו יחד עם קובצי המשימה. אווה של עבודת הבית'התיקייה יחד עם שאר קובצי הג

שנקרא הפותרן מבוסס על פותרן (. SAT Solver)בעיית הסיפוק הבוליאני נמצאים עיקרי הממשק לפותרן בקובץ

SAT4J .תוכלו להיעזר בגוגל, אם תרצו ללמוד יותר על פותרן זה .

להוסיף את הפסוקיות המהוות את , יש לאתחל את הפותרן, בעזרת הפותרן CNFלמצוא השמה מספקת לנוסחת כדי

.(פתרון)השמה מספקת ולבקש הנוסחה

:SAT Solver-עיקרי הממשק של ה

פונקציה יש לבצע קריאה ל :אתחולSATSolver.init(int nVars) הערך במשתנה כאשרnVars מציין

, למשל. יילקחו אך ורק מתוך הקבוצה CNF-שיופיעו בנוסחת ה CNF-שמשתני ה

מתוך CNFיחס רק למשתני ילהת אפשריהיה , SATSolver.init(34): לאחר אתחול הפותרן בקריאה

. הקבוצה

יש לקרוא לפונקציה ,להוסיף פסוקית בודדת לפותרן כדי :הוספת פסוקית

SATSolver.addClause(int[] clause)

:שורות הקוד הבאות, למשל .מייצג פסוקית clause המערך כאשר

int[] clause = {5,2,-6,7,12};

SATSolver.addClause(clause);

.לפותרן את הפסוקית פויוסי

יש לקרוא לפונקציה ,פסוקיות לפותרן כמהלהוסיף כדי :הוספת פסוקיות

SATSolver.addClauses(int[][] clauses)

:שורות הקוד הבאות, למשל .פסוקיותמייצג את ה clausesממדי -כאשר המערך הדו

int[][] clauses = { {5,-2,6}, {4,-17,99} };

SATSolver.addClauses(clauses);

.לפותרן -ו את הפסוקיות פויוסי

ה נוסחתאת לפתור כדי :מציאת השמה מספקת-CNF שהצטברה עד כה ב-SATSolver, יש לקרוא

לפונקציה

SATSolver.getSolution()

Page 20: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

20

:ערך לפי אחת משלוש האפשרויות הבאות פונקציה זו מחזירה

אורך המערך יהיה כמספר המשתנים פלוס . השמה מספקתשישנה במידה - שאינו ריקמערך בוליאני .1

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

(. לא קיימת לה השמה מספקת)אינה ספיקה הנוסחה שבמידה – מערך בוליאני ריק .2

(.דקות 3של timeout)עקב מגבלת זמן , לא מצא פתרוןהפותרן שבמידה – nullערך .3

:דוגמאות

, : בעלת שלוש פסוקיות CNFהתכנית הבאה מגדירה נוסחת .1

.אם לא "UNSAT"-ו, הנוסחה מסתפקתם א "SAT"ומדפיסה , מבקשת השמה מספקת מהפותרן

int nVars = 3;

SATSolver.init(nVars);

int[] clause = {1} ;

SATSolver.addClause(clause);

int[][] clauses = {{-1,-2}, {2,3}} ;

SATSolver.addClauses(clauses);

boolean[] assignment = SATSolver.getSolution() ;

if (assignment.length == nVars+1)

System.out.println("SAT");

else

System.out.println("UNSAT");

.”SAT“הפלט של תכנית זו הוא

:ארבע פסוקיות תבעל CNFהתכנית הבאה מגדירה נוסחת .2

.אם לא "UNSAT"-ו, הנוסחה מסתפקתאם "SAT"מדפיסה , מבקשת השמה מספקת מהפותרן

int nVars = 3 ;

SATSolver.init(nVars);

int[] clause = {1} ;

SATSolver.addClause(clause);

int[][] clauses = {{-1,-2}, {2,3}, {-1,-3}} ;

SATSolver.addClauses(clauses);

boolean[] assignment = SATSolver.getSolution() ;

if (assignment.length == nVars+1)

System.out.println("SAT");

else

System.out.println("UNSAT");

.”UNSAT“הפלט הצפוי הוא

Page 21: 2 רפסמ תיב תדובע - BGUintro151/wiki.files/intro181-ass2-ver13.pdf · 2 ח"עשת 'א רטסמס – בשחמה יעדמל אובמ ינאילובה קופיסה תייעבו

21

.דוגמאות נוספות של נוסחאות מסתפקותכמה מכיל ExamplesSAT.javaהקובץ .3

.דוגמאות נוספות של נוסחאות שאינן מסתפקות כמהמכיל ExamplesUNSAT.java הקובץ .4

exactlyOneדוגמאות נוספות של שימוש באילוץ כמה מכיל ExamplesTask6ExactlyOne.javaהקובץ .5

.עם הפותרן שילובב (6משימה המוגדר ב)

?כיצד לשלב את הפותרן בפרויקט אקליפס

:בסביבת אקליפס ולבצע את הפעולות הבאות javaצור פרויקט יבתחילת העבודה מומלץ ל

ספריית הקוד בפרויקט אקליפס . בצי הקוד המצורפים לעבודה לספריית הקוד של הפרויקטולהוסיף את כל ק .1

. כברירת מחדל srcמקבלת את השם

:בצי הקוד שקיבלתםובק שימו לב כי .2

a. ישנו קובץ שנקראorg.sat4j.core.jar . צריכים לעבוד אינכם. את הפותרןמכיל הזהו הקובץ

.בספריית הקוד שלכםשיהיה אבל צריך, איתו ישירות

b. ישנו קובץ שנקראSATSolver.java . זהו הקובץ בו נמצאות כל הפונקציות שאתם צריכים עבור

".SAT Solver-עיקרי הממשק של ה"פונקציות אלו מתוארות בסעיף הקודם . העבודה עם הפותרן

:משל כךל. של הפרויקט Build Path-ליש להוסיף אותו ,לעבוד עם הפותרן אפשרכדי שיהיה .3

a. לחצו עם המקש הימני של העכבר על הקובץ , באקליפסorg.sat4j.core.jar שהוספתם לפרויקט.

b. בחרו באפשרות“Build Path” לחצו על האפשרות אז ו.“Add to Build Path”

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

.עובדת ה אכןהדוגמשבסעיף הקודם ולוודא ש

בהצלחה