簡體   English   中英

如何選擇不同線路的最佳組合

[英]how to select best combination of different lines

前段時間,我開始玩我年輕時的老式 RPG。

您必須制作一組 4 個角色,每個角色在技能列表中的值從 0(無法學習該技能)到 5(掌握該技能)。

例如,它看起來有點像這樣:

         Shield Sword Magic
Knight     5      5     0
Ranger     2      3     3
Sorcerer   0      0     5

當然還有更多的技能和更多的課程。

所以我想制作一個可以測試所有職業組合的腳本,並在最后給我最能掌握技能的 4 個角色。

但是我不需要 2 種技能才能被 2 個不同的角色最大化,例如,如果巫師可以在魔法中獲得 5,我不一定需要另一個可以做到這一點的角色。

我的想法是進行一些 for 循環,它將比較所有 4 個英雄組合的所選技能列中的所有值,然后繼續進行下一個,等等......

但我不知道從哪里開始以及如何做。 有任何想法嗎?

祝大家有個愉快的一天

我的評論的示例實現,不需要 Pandas。

import itertools
from collections import Counter

class_infos = {
    "knight": {"shield": 5, "sword": 5},
    "ranger": {"shield": 2, "sword": 3, "magic": 3},
    "sorcerer": {"magic": 5},
    "street_urchin": {"shield": 1, "sword": 1, "magic": 1},
}


def score_party(party_classes):
    skill_totals = Counter()
    skill_occurrences = Counter()

    for char_cls in party_classes:
        char_skills = class_infos[char_cls]
        skill_totals.update(char_skills)  # Sum up skill points
        # Sum up occurrences of skills in the party composition.
        skill_occurrences.update({skill for skill, value in char_skills.items() if value})

    total_skill = sum(skill_totals.values())
    # Figure out how many skills are non-unique.
    skills_with_overlap = {skill for (skill, chars) in skill_occurrences.items() if chars > 1}
    # TODO: adjust this divisor – right now it just looks at the number of skills
    #       that overlap between characters, and quite heavily penalizes them.
    divisor = 1 + len(skills_with_overlap)
    return total_skill / divisor


def main():
    num_party_members = 2
    party_scores = {
        frozenset(party): score_party(party)
        for party in itertools.combinations(class_infos, num_party_members)
    }

    for party, score in sorted(party_scores.items(), key=lambda x: x[1], reverse=True):
        print(sorted(party), score)


if __name__ == "__main__":
    main()

輸出(對於這些示例數字和 2 方)

['knight', 'sorcerer'] 15.0
['ranger', 'sorcerer'] 6.5
['knight', 'ranger'] 6.0
['knight', 'street_urchin'] 4.33
['sorcerer', 'street_urchin'] 4.0
['ranger', 'street_urchin'] 2.75

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM