Here's a pretty simple AI I came up with for solitaire play. You're not competing with these penguins for points; rather, they are there to block you or eat up the best fish before you can get to them. Since you know how the AI will react, they are exploitable, but if anything I think this increases the strategic potential of the game.
Here's the basic idea: You get 3 penguins in your color. After setting up the tiles, place your 3 penguins anywhere you'd like, following the normal rules. Then, place one penguin of each unused color. These penguins must be placed on a 3-fish tile, and must be at least 3 hexes away from any other penguin. If this is impossible, move some tiles around to make it work.
Play order is: You (move only one of your penguins, your choice), AI #1, AI #2, AI #3, then back to you. Use an extra pawn of each color to distinguish the different scoring piles.
The AI follow a simple and mostly intuitive pattern:
-In general, the penguins prioritize ending their movement on a high-scoring tile and moving the shortest distance possible, in that order. Also, they do not plan ahead unless explicitly stated; all decisions are made based on the current board state, with no regard for their opponents' probable moves. They're there to break up the board and limit your movement, not score points.
-AI is subject to the normal movement rules.
*IMPORTANT: A penguin will not intentionally move in such a way that it loses access to the largest group of tiles. It's okay with losing access to smaller groups of tiles). In other words, it won't intentionally "maroon" itself except on the largest "island." Remember, though, that this decision is only based on the current board state, and doesn't factor in how other players may act, even on the next turn!
*If a penguin becomes marooned (i.e. it is cut off from all other penguins), it ignores the priorities below. Instead, it immediately eats as many fish on its island as it can by legal movement, then sits out of the rest of the game.
The priorities, in order:
1) If the penguin can reach a 3-fish tile in a single movement, it will move to the nearest available one.
2) If a penguin can move in a way that makes a 3-fish tile accessible on the following turn, it will do so. If possible, it will a) end its movement on a 2-fish tile, and b) travel the shortest distance required to do so (in that order of priority).
3) If neither of the above is possible, the penguin will move to the nearest available 2-fish tile. If more than one tile is equidistant, it will prefer the tile with the most total fish immediately surrounding it.
4) If none of the above movements are possible, the penguin will move in a way that gives it access to a 2-fish tile on the next turn, travelling the shortest distance required to do so.
5) As a last resort, the penguin will move to the tile that has the most total fish adjacent to it.