Exemplo n.º 1
0
        public static void Main(string[] args)
        {
            int  mineral, gas, supply;
            Data data = new Data();

            if (args.Length != 3)
            {
                System.Console.WriteLine("Usage: ResourceAllocation #mineral #gas #supply");
                //return;
                mineral = 1000;
                gas     = 700;
                supply  = 19;
            }
            else
            {
                mineral = Convert.ToInt32(args[0]);
                gas     = Convert.ToInt32(args[1]);
                supply  = Convert.ToInt32(args[2]);
            }

            int maxSize = Math.Max(mineral / 25, Math.Max(gas / 25, supply));
            var domain  = new ghost.Domain(maxSize, 0);

            var listUnits = MakeTerranUnits(domain);
            var setUnits  = new SetVariables(listUnits);

            var constraints = new List <Constraint> {
                new MineralConstraint(setUnits, mineral),
                new GasConstraint(setUnits, gas),
                new SupplyConstraint(setUnits, supply)
            };

            var objective = new MaxDPS("max DPS", mineral, gas, supply);
            var solver    = new ghost.Solver <Variable, SetVariables, Constraint>(setUnits, constraints, objective);

            Console.WriteLine("Start solving trivial test");
            solver.solve(20, 150);

            int    mineralUsed = 0;
            int    gasUsed     = 0;
            double supplyUsed  = 0.0;
            double DPS         = 0.0;

            for (int i = 0; i < setUnits.GetNumberVariables(); ++i)
            {
                mineralUsed += setUnits.GetValue(i) * data.Dataset[setUnits.Name(i)].CostMineral;
                gasUsed     += setUnits.GetValue(i) * data.Dataset[setUnits.Name(i)].CostGas;
                supplyUsed  += setUnits.GetValue(i) * data.Dataset[setUnits.Name(i)].CostSupply;
                if (data.Dataset[setUnits.Name(i)].GroundAttack > 0)
                {
                    DPS += setUnits.GetValue(i) * ((double)data.Dataset[setUnits.Name(i)].GroundAttack / data.Dataset[setUnits.Name(i)].GroundCooldown);
                }
            }

            DPS *= 24;
            Console.WriteLine("DPS = " + DPS);
            Console.WriteLine("Mineral left: " + (mineral - mineralUsed) + ", gas left: " + (gas - gasUsed) + ", supply left: " + (supply - supplyUsed));
        }
Exemplo n.º 2
0
 public Variable(string name,
                 string fullName,
                 ghost.Domain domain,
                 double range,
                 int value = -1)
     : base(name, fullName, domain, value)
 {
     Range = range;
 }
Exemplo n.º 3
0
        public static void Main( string[] args )
        {
            int mineral, gas, supply;
              Data data = new Data();

              if( args.Length != 3 )
              {
            System.Console.WriteLine( "Usage: ResourceAllocation #mineral #gas #supply" );
            //return;
            mineral = 20000;
            gas = 14000;
            supply = 380;
              }
              else
              {
            mineral = Convert.ToInt32( args[ 0 ] );
            gas = Convert.ToInt32( args[ 1 ] );
            supply = Convert.ToInt32( args[ 2 ] );
              }

              int maxSize = Math.Max( mineral / 25, Math.Max( gas / 25, supply ) );
              var domain = new ghost.Domain( maxSize, 0 );

              var listUnits = MakeTerranUnits( domain );
              var setUnits = new SetVariables( listUnits );

              var constraints = new List< Constraint > {
            new MineralConstraint( setUnits, mineral ),
            new GasConstraint( setUnits, gas ),
            new SupplyConstraint( setUnits, supply )
              };

              var objective = new MaxDPS( "max DPS", mineral, gas, supply );
              var solver = new ghost.Solver< Variable, SetVariables, Constraint >( setUnits, constraints, objective );

              Console.WriteLine( "Start solving trivial test" );
              solver.solve( 100, 2000 );

              int mineralUsed = 0;
              int gasUsed = 0;
              double supplyUsed = 0.0;
              double DPS = 0.0;

              for( int i = 0 ; i < setUnits.GetNumberVariables() ; ++i )
              {
            mineralUsed += setUnits.GetValue( i ) * data.Dataset[ setUnits.Name( i ) ].CostMineral;
            gasUsed += setUnits.GetValue( i ) * data.Dataset[ setUnits.Name( i ) ].CostGas;
            supplyUsed += setUnits.GetValue( i ) * data.Dataset[ setUnits.Name( i ) ].CostSupply;
            if( data.Dataset[ setUnits.Name( i ) ].GroundAttack > 0 )
              DPS += setUnits.GetValue( i ) * ( (double)data.Dataset[ setUnits.Name( i ) ].GroundAttack / data.Dataset[ setUnits.Name( i ) ].GroundCooldown );
              }

              DPS *= 24;
              Console.WriteLine( "DPS = " + DPS );
              Console.WriteLine( "Mineral left: " + (mineral - mineralUsed) + ", gas left: " + (gas - gasUsed) + ", supply left: " + (supply - supplyUsed) );
        }
Exemplo n.º 4
0
 static List <Variable> MakeTerranUnits(ghost.Domain domain)
 {
     return(new List <Variable> {
         new Variable("Marine", domain, Race.Terran),
         new Variable("Firebat", domain, Race.Terran),
         new Variable("Ghost", domain, Race.Terran),
         new Variable("Vulture", domain, Race.Terran),
         new Variable("SiegeTank_tankMode", domain, Race.Terran),
         new Variable("SiegeTank_siegeMode", domain, Race.Terran),
         new Variable("Goliath", domain, Race.Terran),
         new Variable("Wraith", domain, Race.Terran),
         new Variable("Battlecruiser", domain, Race.Terran),
         new Variable("Valkyrie", domain, Race.Terran)
     });
 }
Exemplo n.º 5
0
 static List <Variable> MakeTerranBuildings(ghost.Domain domain)
 {
     return(new List <Variable> {
         new Variable("A", "Terran_Academy", domain, 3, 2, 0, 3, 7, 8, Race.Terran, 2),
         new Variable("A", "Terran_Academy", domain, 3, 2, 0, 3, 7, 8, Race.Terran, 2),
         new Variable("B", "Terran_Barracks", domain, 4, 3, 8, 7, 15, 16, Race.Terran, 1),
         new Variable("B", "Terran_Barracks", domain, 4, 3, 8, 7, 15, 16, Race.Terran, 1),
         new Variable("U", "Terran_Bunker", domain, 3, 2, 8, 15, 15, 16, Race.Terran, 2),
         new Variable("U", "Terran_Bunker", domain, 3, 2, 8, 15, 15, 16, Race.Terran, 2),
         new Variable("F", "Terran_Factory", domain, 4, 3, 8, 7, 7, 8, Race.Terran, 2),
         new Variable("F", "Terran_Factory", domain, 4, 3, 8, 7, 7, 8, Race.Terran, 2),
         new Variable("S", "Terran_Supply_Depot", domain, 3, 2, 10, 9, 5, 10, Race.Terran, 0),
         new Variable("S", "Terran_Supply_Depot", domain, 3, 2, 10, 9, 5, 10, Race.Terran, 0)
     });
 }
Exemplo n.º 6
0
 public Variable(string name,
                 string fullName,
                 ghost.Domain domain,
                 int length,
                 int height,
                 int gapTop,
                 int gapRight,
                 int gapBottom,
                 int gapLeft,
                 Race race,
                 int treedepth,
                 int value = -1)
     : base(name, fullName, domain, value)
 {
     Length    = length;
     Height    = height;
     GapTop    = gapTop;
     GapRight  = gapRight;
     GapBottom = gapBottom;
     GapLeft   = gapLeft;
     Race      = race;
     Treedepth = treedepth;
 }
Exemplo n.º 7
0
        static void Main( string[] args )
        {
            var unbuildables = new List< SetVariables.Point > {
            new SetVariables.Point( 7, 12 ),
            new SetVariables.Point( 7, 13 ),
            new SetVariables.Point( 7, 14 ),
            new SetVariables.Point( 7, 15 ),
            new SetVariables.Point( 8, 10 ),
            new SetVariables.Point( 8, 11 ),
            new SetVariables.Point( 8, 12 ),
            new SetVariables.Point( 8, 13 ),
            new SetVariables.Point( 8, 14 ),
            new SetVariables.Point( 8, 15 ),
            new SetVariables.Point( 9, 10 ),
            new SetVariables.Point( 9, 11 ),
            new SetVariables.Point( 9, 12 ),
            new SetVariables.Point( 9, 13 ),
            new SetVariables.Point( 9, 14 ),
            new SetVariables.Point( 9, 15 ),
            new SetVariables.Point( 10, 8 ),
            new SetVariables.Point( 10, 9 ),
            new SetVariables.Point( 10, 10 ),
            new SetVariables.Point( 10, 11 ),
            new SetVariables.Point( 10, 12 ),
            new SetVariables.Point( 10, 13 ),
            new SetVariables.Point( 10, 14 ),
            new SetVariables.Point( 10, 15 ),
            new SetVariables.Point( 11, 8 ),
            new SetVariables.Point( 11, 9 ),
            new SetVariables.Point( 11, 10 ),
            new SetVariables.Point( 11, 11 ),
            new SetVariables.Point( 11, 12 ),
            new SetVariables.Point( 11, 13 ),
            new SetVariables.Point( 11, 14 ),
            new SetVariables.Point( 11, 15 )
              };

              var domain = new ghost.Domain( 16 * 12, 0 );

              var listBuildings = MakeTerranBuildings( domain );

              var setBuildings = new SetVariables( listBuildings,
                                           12,
                                           16,
                                           new SetVariables.Point( 11, 7 ),
                                           new SetVariables.Point( 6, 15 ) );

              setBuildings.Unbuildable( unbuildables );

              var constraints = new List< Constraint > {
            new OverLap( setBuildings ),
            new Buildable( setBuildings ),
            new WallShape( setBuildings ),
            new StartingTargetTiles( setBuildings )
              };

              var objective = new GapObjective();

              var solver = new ghost.Solver< Variable, SetVariables, Constraint >( setBuildings, constraints, objective );

              Console.WriteLine( "Start solving trivial test" );
              solver.solve( 20, 150, false );

            // 3.4 GHz, mono 20,150 7 tours 44 iterations
            //            C++      12 tours 400 iteratons
        }
Exemplo n.º 8
0
 public Variable(string name, ghost.Domain domain, Race race, int value = 0)
     : base(name, name, domain, value)
 {
     Race = race;
 }
Exemplo n.º 9
0
 public Variable(string name, string fullName, ghost.Domain domain, int value = -1)
     : this(name, fullName, domain, 0, 0, 0, 0, 0, 0, Race.Unknown, 0, value)
 {
 }
Exemplo n.º 10
0
        static void Main(string[] args)
        {
            var unbuildables = new List <SetVariables.Point> {
                new SetVariables.Point(7, 12),
                new SetVariables.Point(7, 13),
                new SetVariables.Point(7, 14),
                new SetVariables.Point(7, 15),
                new SetVariables.Point(8, 10),
                new SetVariables.Point(8, 11),
                new SetVariables.Point(8, 12),
                new SetVariables.Point(8, 13),
                new SetVariables.Point(8, 14),
                new SetVariables.Point(8, 15),
                new SetVariables.Point(9, 10),
                new SetVariables.Point(9, 11),
                new SetVariables.Point(9, 12),
                new SetVariables.Point(9, 13),
                new SetVariables.Point(9, 14),
                new SetVariables.Point(9, 15),
                new SetVariables.Point(10, 8),
                new SetVariables.Point(10, 9),
                new SetVariables.Point(10, 10),
                new SetVariables.Point(10, 11),
                new SetVariables.Point(10, 12),
                new SetVariables.Point(10, 13),
                new SetVariables.Point(10, 14),
                new SetVariables.Point(10, 15),
                new SetVariables.Point(11, 8),
                new SetVariables.Point(11, 9),
                new SetVariables.Point(11, 10),
                new SetVariables.Point(11, 11),
                new SetVariables.Point(11, 12),
                new SetVariables.Point(11, 13),
                new SetVariables.Point(11, 14),
                new SetVariables.Point(11, 15)
            };

            var domain = new ghost.Domain(16 * 12, 0);

            var listBuildings = MakeTerranBuildings(domain);

            var setBuildings = new SetVariables(listBuildings,
                                                12,
                                                16,
                                                new SetVariables.Point(11, 7),
                                                new SetVariables.Point(6, 15));

            setBuildings.Unbuildable(unbuildables);

            var constraints = new List <Constraint> {
                new OverLap(setBuildings),
                new Buildable(setBuildings),
                new WallShape(setBuildings),
                new StartingTargetTiles(setBuildings)
            };

            var objective = new GapObjective();

            var solver = new ghost.Solver <Variable, SetVariables, Constraint>(setBuildings, constraints, objective);

            Console.WriteLine("Start solving trivial test");
            solver.solve(20, 150, false);


            // 3.4 GHz, mono 20,150 7 tours 44 iterations
            //            C++      12 tours 400 iteratons
        }