Are there any chess engines which try to emulate human thinking? As I understand it chess engines mostly share the basic pattern of having a simple score for the board position and then searching forward with some sort of alpha-beta pruning or similar.

Presumably in the early days people tried to program in the thinking algorithms of a human, before finding that was very weak in a computer.

Now that we have vast computer power, are their any engines that try to do this?  They will no doubt still be weak, but could be interesting nonetheless - not least in what it can teach us about how to improve our heuristics.

By "human thinking" I'm meaning things like


Deliberately making and breaking pawn structures
Having a plan
Using heuristics ("knights on the rim...", "castle quickly")


To be clear, the question is about writing an engine to emulate human thinking not human play.  It may (or may not) be possible to tweak alpha-beta engines to produce game play that looks human, but you could never interrogate the algorithm and ask it "why did you play that?".
In a sense, an attempt to "emulate human thinking" has been done since Atkin and Slate's Chess 4.0 in the 1970's, by tuning the evaluation function based on feeding masses of Grandmaster games through and tuning the parameters to closely mirror the players' choices.

I think you're contemplating approaches fundamentally different from the standard Alpha-Beta search paradigm though.  That has proven remarkably difficult, and probably some of the best work was done with very early chess engines.  Unfortunately, such approaches tend to be "brittle", because there are so many exceptions to every rule, and tactics (which searching essentially everything excels at) tends to fall down hard without it.

I think, though, you are fundamentally on the right track, in that the distinction between very strong players and weak ones is fundamentally pattern-recognition of positions based on long experience, and being able to "prune the tree" of plausible moves to look at from the start.  It would seem there should be a way to store in a database knows "clusters of pieces" for which the game tree has already been partially calculated, such that if you could define the exceptions--i.e. "those pieces were there rather than here in the position I previously calculated and stored", and write a "possible move differences tree" algorithm, you could vastly increase efficiency in a manner very parallel to the way humans do it.  I've given some broad design thought to this, but alas, other practical income-earning coding has always taken precedence...