SmallTownAI
Moderator: OpenTTD Developers
- ethaninfinity
- Engineer
- Posts: 18
- Joined: 05 Apr 2018 16:50
- Location: due west of somewhere...
SmallTownAI
Hello,
I have been playing OpenTTD for years, but this is my first attempt at a useful AI.
It is still a WIP, and occasionaly fails to make money.
Please help me to find and remove bugs, and any feedback is appreciated.
SmallTownAI currently:
builds extensive 12-station bus networks across the map
Known Issues:
Struggles with small maps
Some credit to WrightAI, as several parts of SmallTownAI are based upon it.
I have been playing OpenTTD for years, but this is my first attempt at a useful AI.
It is still a WIP, and occasionaly fails to make money.
Please help me to find and remove bugs, and any feedback is appreciated.
SmallTownAI currently:
builds extensive 12-station bus networks across the map
Known Issues:
Struggles with small maps
Some credit to WrightAI, as several parts of SmallTownAI are based upon it.
- Attachments
-
- SmallTownAI-8.tar
- The newest version of this ai
- (40 KiB) Downloaded 249 times
-
- Unnamed, Nov 6th, 1952.png
- An example network built by this ai
- (884.54 KiB) Not downloaded yet
Last edited by ethaninfinity on 09 May 2020 22:34, edited 16 times in total.
Re: SmallTownAI
Hey, that's a good start! Welcome to the forums and the fun of coding AI.
- ethaninfinity
- Engineer
- Posts: 18
- Joined: 05 Apr 2018 16:50
- Location: due west of somewhere...
Re: SmallTownAI
Thanks for the encouragement! It doesn't do much now, but I hope to work on it until it is at least competitive with some of the other AIs out there.Hey, that's a good start! Welcome to the forums and the fun of coding AI.
Also, an update! This version actually places stations that connect to roads and builds a bus to connect them.
- Attachments
-
- SmallTownAi_R1.tar
- The first money-making(sometimes) version of this AI!
- (13.5 KiB) Downloaded 247 times
- ethaninfinity
- Engineer
- Posts: 18
- Joined: 05 Apr 2018 16:50
- Location: due west of somewhere...
Re: SmallTownAI
Update!
R2: Now builds an inter-city network!
Now on BaNaNaS!
R2: Now builds an inter-city network!
Now on BaNaNaS!
- Attachments
-
- Inter-city connection.png
- (931.51 KiB) Not downloaded yet
-
- SmallTownAi_R2.tar
- (24.5 KiB) Downloaded 234 times
Re: SmallTownAI
Nice update.
I've noticed it frequently builds the first two bus stops right next to each other. Also, with newgrfs loaded (eg Road Hog), the AI thinks it's building buses but nothing is built.
I've noticed it frequently builds the first two bus stops right next to each other. Also, with newgrfs loaded (eg Road Hog), the AI thinks it's building buses but nothing is built.
- Attachments
-
- Image1.png (37.43 KiB) Viewed 3215 times
- ethaninfinity
- Engineer
- Posts: 18
- Joined: 05 Apr 2018 16:50
- Location: due west of somewhere...
Re: SmallTownAI
Thanks for the info! The bus stops being built close to each other is a known issue that should be fixed soon, and I will look into the bus issue and try to fix it.Nice update.
I've noticed it frequently builds the first two bus stops right next to each other. Also, with newgrfs loaded (eg Road Hog), the AI thinks it's building buses but nothing is built.
Re: SmallTownAI
Isn't that because the ai_engine_rank is set at 0 ?PikkaBird wrote:Nice update.
I've noticed it frequently builds the first two bus stops right next to each other. Also, with newgrfs loaded (eg Road Hog), the AI thinks it's building buses but nothing is built.
AFAIK there are a few sets that do allow their vehicles being used by AI other than Road Hog. Bob's British Buses/Random Vehicles work perfectly with AI - even though, in the later years, it tends to use a lot the UKB Quad
Re: SmallTownAI
No, it isn't.acs121 wrote:Isn't that because the ai_engine_rank is set at 0 ?
Re: SmallTownAI
Why then ?PikkaBird wrote:No, it isn't.acs121 wrote:Isn't that because the ai_engine_rank is set at 0 ?
Re: SmallTownAI
At a quick glance: Because something in ethan's vehicle evaluation code isn't working as intended. I'd draw his attention, particularly, to the fact that AICargo.CC_PASSENGERS is a cargo class (and == 1), not the cargo ID for passengers. It's probably safe to assume passengers are cargo 0, at least for now.acs121 wrote:Why then ?
- ethaninfinity
- Engineer
- Posts: 18
- Joined: 05 Apr 2018 16:50
- Location: due west of somewhere...
Re: SmallTownAI
Yes, that was the issue, or at least one of the issues. My code also wasn't removing invalid engines from the list, so it was trying to build one of the default buses though it couldn't with Road Hogs in use. It was mostly luck that it somewhat worked in the first place, but all of that is (hopefully) fixed now. It also now chooses the newest vehicle available, which is not the best way to choose but not as bad as it was, and is simple to do.Because something in ethan's vehicle evaluation code isn't working as intended. I'd draw his attention, particularly, to the fact that AICargo.CC_PASSENGERS is a cargo class (and == 1), not the cargo ID for passengers.
- Attachments
-
- SmallTownAI-3.tar
- (24.5 KiB) Downloaded 234 times
- ethaninfinity
- Engineer
- Posts: 18
- Joined: 05 Apr 2018 16:50
- Location: due west of somewhere...
Re: SmallTownAI
Hello, I have gotten stuck while trying to fix the issue of stations being built too close together. I don't see anything wrong with the code, but it seems to do absolutely nothing :
After this is fixed, the next version of the ai should be nearly ready
Code: Select all
//station1_location is the list of potential tiles for station construction
//go through every potential station location to check for nearby stations
for(local test_tile = station1_location.Begin(); station1_location.IsEnd() == 0; station1_location = station1_location.Next()) {
//create a list of tiles near the tile being tested
local neighbors = AITileList()
neighbors.AddRectangle(test_tile - (2, 2), test_tile + (2, 2));
//remove non-station tiles
neighbors.Valuate(AITile.IsStationTile)
neighbors.RemoveValue(0);
// if there are still tiles, remove the tile being tested from the list of potential station locations
if(neighbors.Count != 0) {
station1_location.RemoveTile(test_tile);
}
}
Re: SmallTownAI
neighbors.Count() ? Gets me every time too.
- ethaninfinity
- Engineer
- Posts: 18
- Joined: 05 Apr 2018 16:50
- Location: due west of somewhere...
Re: SmallTownAI
Unfortunately, that did not solve the issue. I have added some debug messages, and it appears that what is inside the loop never occurs. I am still stumped. The other thing I am working on for the next update is vehicle renewal, but that also needs a similar loop to work, and I haven't had any luck with it either.neighbors.Count() ? Gets me every time too.
Unfortunately, I haven't worked on the AI much recently, but should return to it after the end of the school year.
P.S.
How do you make a quote show who was quoted?
Re: SmallTownAI
I think you need to replace
with
Code: Select all
station1_location.IsEnd() == 0
Code: Select all
!station1_location.IsEnd()
- ethaninfinity
- Engineer
- Posts: 18
- Joined: 05 Apr 2018 16:50
- Location: due west of somewhere...
Re: SmallTownAI
Thank you! This solved the problem, which means...I think you need to replace
Code:
station1_location.IsEnd() == 0
with
Code:
!station1_location.IsEnd()
Update!
R4: Sensible Stations
The two initial stations now will not be closer than 2 tiles from another station.
Vehicles older than their lifespan will be replaced.
- Attachments
-
- SmallTownAI-R4.tar
- (27.5 KiB) Downloaded 225 times
- ethaninfinity
- Engineer
- Posts: 18
- Joined: 05 Apr 2018 16:50
- Location: due west of somewhere...
Re: SmallTownAI
Update!
R5
This is a bugfix update that fixes the occasional infinite loop when a new network is created, the building of buses even when no bus station is built, and removes the broken vehicle replacement.
R5
This is a bugfix update that fixes the occasional infinite loop when a new network is created, the building of buses even when no bus station is built, and removes the broken vehicle replacement.
- Attachments
-
- SmallTownAI-5.tar
- SmallTownAI R5
- (26 KiB) Downloaded 239 times
Re: SmallTownAI
When it starts creating a new network, it creates a sign on map, but it forgots to delete it, in one of my games it ended with more than 3 thousand signs before I realized the bug.
Line 172 at road.nut
Line 172 at road.nut
Code: Select all
AISign.BuildSign(town_center, "Building Bus Network");
- ethaninfinity
- Engineer
- Posts: 18
- Joined: 05 Apr 2018 16:50
- Location: due west of somewhere...
Re: SmallTownAI
Thanks for the report! I am currently working on rewriting of a lot of this AI, but here is a quick fix that should send the info to the debug window instead of signs. It may still repeat itself, but hopefully not in a way that could break a game.
R6: Less Signs!
R6: Less Signs!
- ethaninfinity
- Engineer
- Posts: 18
- Joined: 05 Apr 2018 16:50
- Location: due west of somewhere...
Re: SmallTownAI
Update!
R7: Roadway to Success
Much of the code has been reworked, leading to better performance in nearly all areas. It also now reliably builds multiple networks, and considers town size when expanding networks.
R7: Roadway to Success
Much of the code has been reworked, leading to better performance in nearly all areas. It also now reliably builds multiple networks, and considers town size when expanding networks.
- Attachments
-
- SmallTownAI-7.tar
- (26.5 KiB) Downloaded 232 times
Who is online
Users browsing this forum: Google Adsense [Bot] and 1 guest