Avatar billede teamone Nybegynder
26. marts 2001 - 13:31 Der er 4 kommentarer og
1 løsning

MiniMax????

Hej...

VI har et(mange) problemer med vores kalaha... Hvad er problemet? .. Hvorfor vælger den ikke den mest optimale løsning efter første træk?

<LIDT KODE>
/* En tabel til alle huller i spillet
    Sort metode
    hvid metode
    evaluerings metode
*/

import java.io.*;
import java.util.*;

public class Class1
{
    static public int værdi=0,bedste_hul=0;
    static public int n=3;
    static public int[]kalaha = {5,5,5,5,5,5,0,5,5,5,5,5,5,0};  // tabel til spillets \"huller\"

    static public boolean igen=false;
   
    public static void main (String[] args) throws IOException
    {                   
        pc(kalaha, -10000, 10000, n);
        traek(bedste_hul);
        vis_braet(kalaha);
        System.in.read();
    }
   
   
   
    public static int pc (int kalaha[], int alfa, int beta, int n)
    {
        int max=0,bedst=0;
        int[]kopi_kalaha = new int [14];       
        for (int bent = 0; bent<kalaha.length; bent++)
        {
            kopi_kalaha[bent] = kalaha[bent];
        }   
       
        if (n==0)
            return kalaha[13]-kalaha[6];
        else
        {
            max=alfa;
            for (int i=7;i<=12;i++)
            {   
                if(kalaha[i]==0)
                {
                    continue;
                }
               
                traek(i);
               
                if(igen==true)
                {
                    igen=false;
                    værdi=pc(kalaha,alfa, beta, n);   
                }
                else
                {   
                    værdi=human(kalaha, max, beta, n-1);
                    //slet(i);
                    if (værdi>max)
                    {
                        max = værdi;
                        bedst=i;
                    }               
                    if (max>=beta)
                    {
                        bedste_hul=bedst;
                        return max;
                    }
                }
                for (int bent = 0; bent<kopi_kalaha.length; bent++)
                {
                    kalaha[bent] = kopi_kalaha[bent];
                }   
            }
            bedste_hul=bedst;
           
            return max;
        }
    }
    //          *********************************************************
    public static int human (int kalaha[], int alfa, int beta, int n)
    {   
        int min=0,bedst=0;
        int[]kopi_kalaha = new int [14];
       
        for (int bent = 0; bent<kalaha.length; bent++)    //laver kopi af bræt
        {
            kopi_kalaha[bent] = kalaha[bent];
        }   
       
        if (n==0)
            return kalaha[13]-kalaha[6];
        else
        {
            min=beta;
            for (int i=0;i<=5;i++)
            {
                if(kalaha[i]==0)
                {
                    continue;
                }
                traek(i);
               
                if(igen==true)
                {
                    igen=false;
                    værdi=human(kalaha, alfa, beta, n);   
                }
                else
                {
                    værdi=pc(kalaha, alfa, min, n-1);
                    if (værdi<min)
                    {
                        min = værdi;
                        bedst=i;
                    }
                    if (min<=alfa)
                    {
                        bedste_hul=bedst;
                        return min;
                    }
                }
                for (int bent = 0; bent<kopi_kalaha.length; bent++)    //sætter brættet til orginalen
                {
                    kalaha[bent] = kopi_kalaha[bent];
                }   
            }
            bedste_hul=bedst;
           
            return min;
        }
    }
    //                *************************************************************
    public static void traek(int hul)  //metode til at foretage et træk
    {
        int kugler=kalaha[hul];
        int org_hul = hul;
        kalaha[hul]=0;   
        hul++;
        igen=false;
        System.out.println();
   
        for (int i=0;i<kugler;i++)
        {
            if(org_hul<6)
            {   
                if (hul==13)    //putter ikke i modstander kalaha
                    hul=0;
            }       
            if(org_hul>6)
            {
                if(hul==14)        //render rundt
                    hul=0;
                if(hul==6)    //putter ikke i modstander kalaha
                    hul=7;
            }               
            kalaha[hul]++;           
            hul++;
        }   
        if(hul == 14 && org_hul>6)
            igen=true;
       
        if(hul == 7 && org_hul<6)
            igen=true;
       
        //vis_braet(kalaha);
    }
    //                        *********************************************
    public static void vis_braet(int [] kalaha)
    {
        System.out.print(\"    \");
       
        for(int x = 12; x > 6; x--)
        {   
            System.out.print(x + \":\" + kalaha[x] + \" Stk.    \\b\");
        }
   
        System.out.println(\"\\n\");
   
        System.out.println(\"\\t  K1: \" + kalaha[13] + \" Stk.\\t\\t\\t\\t\\t K2: \" + kalaha[6] + \" Stk. \\n\"); 
        System.out.print(\"    \");
   
        for(int x = 0; x <= 5; x++)
        {   
            System.out.print(\" \"+ x + \":\" + kalaha[x] + \" Stk.    \\b\");       
        }
        System.out.println();    System.out.println(); System.out.println(\"\\t_____________________________________________________________  \");   
    }
    //                    **************************************************
   
}


*g*
Avatar billede disky Nybegynder
26. marts 2001 - 13:34 #2
ja enten er han panisk, eller det er snyd
Avatar billede teamone Nybegynder
26. marts 2001 - 19:30 #3
Øhh, er det nu forbudt at oprette et brugernavn til vores gruppe? - desuden skal vi aflevere opgave imorgen - Ja, vi er paniske :(
Avatar billede disky Nybegynder
27. marts 2001 - 09:17 #4
hejsa Teamone:

Grunden til vi mente det skyldtes at du dag et brugte alle dine point, dette skyldes normalt snyd.

Du siger den ikke vælger det optimale træk. Hvodan ved du hvad det optimale træk er ?

Det kan du jo kune vide hvis den finder et træk der ALTID fører til at den vinder
Avatar billede teamone Nybegynder
04. april 2001 - 23:53 #5
Slut
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester