1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00
Commit Graph

148 Commits

Author SHA1 Message Date
Xilmi
90d72a4458 Chase & FFA-changes
The AI should no longer chase enemy heroes that are not reachable in the same turn, when there's other options as this behavior was quite exploitable.

The AI should now take their overall strength into account when deciding whether to attack or not.
Previously it would attack as long as their assumed army-loss was at most 25%.
Now that is 50% times the ratio of their power compared to the total power of everyone.
2024-09-22 13:06:07 +02:00
Xilmi
c88165f900 Update PriorityEvaluator.cpp
Whirlpools are no longer explorePriority 1 as the AI would then try out all of it's 5 entries on both sides.
2024-09-14 13:41:14 +02:00
Xilmi
22222f0fba Priorization-improvements
Manarecoveryreward now uses float instead of unsigned int in order to avoid extremely high instead of negative scores when the hero has more mana than his mana-limit for example due to mana-vortex.

Moved upgrading armies to a lower priority tier as otherwise the AI would go back to their cities all the time even though there were plenty of other things to do.

Improved exploration logic by putting different kinds of exploration to different priority-tiers.
Looking at the other side of a portal has high priority, visiting an observatory has medium priority and scouting by visiting nearby tiles has low priority.
2024-09-14 02:58:23 +02:00
Xilmi
ab441d8e67 Update PriorityEvaluator.cpp
AI now should no longer ignore spell-scrolls and artifacts of the treasure-class.
2024-09-13 23:06:49 +02:00
Xilmi
af2df5763f Update PriorityEvaluator.cpp
Only if there is a high gold-pressure a buildings' cost will deter from its score.
2024-09-12 22:53:45 +02:00
Xilmi
a1a03d4b74 Merge remote-tracking branch 'upstream/develop' into develop 2024-09-12 14:54:39 +02:00
Ivan Savenko
29f393e024 Removed hardcoded checks for map objects in favor of analyzing
rewardable object content
2024-09-12 12:11:18 +00:00
Xilmi
df119370c7 Exploration
Slightly adjust the value of exploring within the hunter-gather-prirority.
2024-09-10 00:23:17 +02:00
Xilmi
0edc17b7d8 Going to town when nothing to do.
The StayAtTown-behavior now always creates tasks for all heroes to go and stay at a town. It will be treated differently than going to a town for mana in the sense that it is only considered at the lowest priority-tier. So it will only happen when the AI doesn't find anything else to do. It should resolve one of the two main-reasons for losing weak heros.

The hunter-gather-priority-tier now goes strictly by distance for all taks that are considered above 0 in value.
2024-09-06 22:14:59 +02:00
Xilmi
e43492d8b5 Update PriorityEvaluator.cpp
Fixed affordabilitycheck not being negated.
2024-09-06 00:12:44 +02:00
Xilmi
5488a0a29c Removed the "GATHER"-priorityTier
There was no real need for it to be a separated tier from Hunter_gather.
2024-09-05 19:35:47 +02:00
Xilmi
dafc9cd8a8 Update PriorityEvaluator.cpp
Replace float-comparisons with zero by vstd::isAlmostZero
2024-09-05 16:40:06 +02:00
Xilmi
23cd54c998 Preparations for merge
No longer using FuzzyEngine just to create a log-message. It's now only used when isUseFuzzy is set.
Also:
Removed < operator and instead use already existing "canAfford"-Method.
2024-09-05 16:22:25 +02:00
Xilmi
db16a9d234 A bit of clean-up for merge
Set back trace level to 0
Removed EvaluationContexts that weren't used
Encapsulated many debug-messages behinde trace-levels
2024-09-04 16:41:47 +02:00
Xilmi
1176628a88 Update PriorityEvaluator.cpp
Workaround for weird -nan(ind) closestWayRatios.
2024-09-02 01:37:21 +02:00
Xilmi
09badeb5be Enum for PriorityTiers
In order to not confuse PriorityTiers, especially after adding new ones, now using an enum to identify them.
2024-09-02 00:16:19 +02:00
Xilmi
1ef5e8ab1b Update PriorityEvaluator.cpp
Prevent building more buildings when we are saving for our favorite building.
2024-09-01 13:47:30 +02:00
Xilmi
ac8e5b3711 Update PriorityEvaluator.cpp
AI should score citadels and castles higher for better developed towns so that it focuses on finishing the main-town quicker as opposed to developing several smaller towns simultaneously.
2024-08-30 21:02:50 +02:00
Xilmi
56988e054a New priority
1. Take / kill what is reachable in same turn
2. Defend
3. Take / kill what is further away
2024-08-30 18:05:47 +02:00
Xilmi
05d948b582 Priorities
Swapped priority of attacking and defending.
Troop-delivery-missions will check safety of the delivering hero.
2024-08-30 16:46:36 +02:00
Xilmi
dcec5637cd Fix for defense-evaluation.
Defense-evaluation didn't fill armyInvolvement but it was what created the score for it. So there was only score if it also included a HeroExchange.
2024-08-29 21:01:06 +02:00
Xilmi
b92862c04d New priorities
Added more priority-tiers
2024-08-24 14:55:26 +02:00
Xilmi
00e5770aa3 Update PriorityEvaluator.cpp
Revert change that made AI too passive.
2024-08-18 21:22:05 +02:00
Xilmi
e6d907af55 Merge remote-tracking branch 'upstream/develop' into develop 2024-08-18 09:52:59 +02:00
Xilmi
3be25d9414 Update PriorityEvaluator.cpp
Defend towns 1 turn earlier.
2024-08-18 09:47:05 +02:00
Xilmi
8ad6d712c0 lowered aggression
Being less willing to rush across half the map to attack an enemy town only to find it too well defended when arriving there.
2024-08-15 18:16:23 +02:00
Xilmi
b7e4219fde More purposeful defending
Avoid defending towns that are out of reach for the enemy.
2024-08-14 22:53:48 +02:00
Ivan Savenko
97f1a310df Fix miscellaneous issues discovered by Sonar 2024-08-12 18:26:30 +00:00
Xilmi
a7b26e237f Fix crash
Fixed a crash due to improperly trying to access "cb".
2024-08-11 21:59:06 +02:00
Xilmi
958aeb3a60 AI improvements
Deliberately defending towns in danger will now only be performed when the town has at least a citatel.

The AI will now count the buildings per town-type and add a score-bonus to dwellings of towns it already has a lot of buildings of. This shall help with getting a stronger army with less morale-issues.

Scoring for mage-guild now increased the bigger the existing armies are.

AI is less afraid of enemy-heros than previously.
2024-08-11 18:21:24 +02:00
Xilmi
ec5da0e6b3 Update PriorityEvaluator.cpp
Further working towards heroes avoiding danger.
2024-08-07 01:36:27 +02:00
Xilmi
07108ce03d Update PriorityEvaluator.cpp
Allow defending in priority 2.
2024-07-25 21:49:17 +02:00
Xilmi
19b969406c Update PriorityEvaluator.cpp
Delivering troops to mains is now considered a priority 0 task that should immediately be fulfilled.
Defending nearby towns against nearby enemies is now also considered a priority 0 task.
Priority 0 tasks are now exclusively scored by distance and armyloss has only a cut-off-point instead of lowering the score.

Building-cost now has more impact on their score.
2024-07-24 21:22:14 +02:00
Xilmi
e374f24016 complete Building-costs as evaluation-context
Added building-cost including all resoruces as evaluation-context for more sophisticated building-selection and also as a countermeasure to softlocking a build-order by having no ways to obtain certain resources.
For example, if the AI would drop below 5 wood, while having no market-place and no wood-income it will avoid building any buildings that neither allow trading nor produce wood.
2024-07-19 15:25:24 +02:00
Xilmi
fbe1e171fe Merge remote-tracking branch 'upstream/develop' into develop 2024-07-15 18:36:19 +02:00
Xilmi
4a552d411c Decisionmaking-changes
There's 3 new evaluation-contexts that are now taken into account:
Whether an action is building, whether an action involves sailing and the newly introduced threat.

The value-evaluation of creatures now also takes special resources into account.

No longer treating other AIs differently than players when it comes to how afraid we shall be of them.

The cost of buildings for decision-making now determines missing resources. Available resources are ignored when it comes to how they impact the cost. But missing-resources will heftily impact the assumed price by calculating their market-value. This shall encourage the AI to rather build what it currently can build instead of saving up for something that it lacking the special resources for.

AI is no longer willing to sacrifice more than 25% of their army for any attack except when it has no towns left.

Revamped the priority-tiers of AI decision-making.

Higest priority is conquering enemy towns and killing enemy heroes. However, the AI will no longer try to do so when the target is more than one turn away and protected by a nearby enemy-hero that could kill the one tasked with dealing with the target. Except when they have no towns left. Then they get desperate and try everything.

As a general rule of thumb one could say the AI will prioritize conquest over collecting freebies over investing army to get something that isn't a city. It's a bit more complex than that but this is roughly what can be expected. It will also highly value their own heroes safety during all this.
2024-07-15 18:12:52 +02:00
Xilmi
d878d0ce18 Avoid being killed
Heroes with conquest-tasks will only endanger themselves to be killed when they can execute a conquest in the same turn.

Heroes with other tasks will dismiss any tasks except of defending when they'd be within one turn of an enemy hero that could kill them.
2024-07-12 23:36:41 +02:00
Xilmi
92bed2305e priority-tiers
Tasks are now in different priority-tiers. For now there's 2 tiers. One for regular tasks and one for tasks of the new "conquest"-type. Regular tasks will only be considered when no possible conquest-type tasks were found.

Slightly reworked scoring heuristics.
2024-07-12 17:41:46 +02:00
Xilmi
7b407b6432 AI-variant without fuzzy-logic
It is now possible to switch to an AI-variant that uses hand-written heuristics for decision-making rather than the FuzzyLite-engine. This is configurable in nkai-settings.json via the new parameter "useFuzzy".
2024-07-07 22:44:52 +02:00
Andrii Danylchenko
1be36e1ad4 NKAI: rewardables 2024-07-07 21:58:39 +03:00
Alexander Wilms
02e429e973 Fix typos using https://github.com/crate-ci/typos
Changes were reviewed manually
2024-06-24 03:47:19 +02:00
Andrii Danylchenko
1388fb1493 NKAI: port exploration from VCAI 2024-05-20 22:43:23 +03:00
Andrii Danylchenko
70fad45316
Merge pull request #3770 from vcmi/nkai-multitask
NKAI: allow multiple tasks to be executed from one calculation
2024-04-20 15:21:11 +03:00
Andrii Danylchenko
3939c4b9d3 NKAI: stability fixes and regression 2024-04-20 14:32:58 +03:00
Alexander Wilms
7d925b3689 Fix typo: Preasure -> Pressure 2024-04-16 21:10:15 +00:00
Andrii Danylchenko
ed76d8a652 NKAI: allow multiple tasks to be executed from one calculation 2024-04-14 16:46:05 +03:00
Andrii Danylchenko
728f673763 NKAI: remove static ai field 2024-03-31 21:11:25 +03:00
Andrii Danylchenko
35429eab52 NKAI: moddable configuration 2024-03-01 22:03:07 +02:00
Alexander Wilms
678cacbd25 Remove more redundant virtual specifiers
`grep -nr "virtual " | grep -v googletest | grep " override" | grep -v overriden > ../redundant_virtual.txt`

```python
import os

with open("../redundant_virtual.txt") as f:
    for line in f:
        print()
        line: str = line.strip()
        print(line)
        tmp = line.split(":",2)
        file = tmp[0].strip()
        code = tmp[-1].strip()
        print(file)
        print(code)
        new_code = code.replace("virtual ", "", 1)
        # https://superuser.com/a/802490/578501
        command = f"export FIND='{code}' && export REPLACE='{new_code}' && ruby -p -i -e \"gsub(ENV['FIND'], ENV['REPLACE'])\" {file}"
        os.system(command)
```
2024-02-13 15:21:30 +01:00
Andrii Danylchenko
0c1664dbe7 NKAI: various AI fixes after tests in headless 2024-01-20 22:55:30 +02:00