destiny-platform / modules /planner.py
sunhonghua's picture
Upload 54 files
e4efb8a verified
Raw
History Blame Contribute Delete
8.4 kB
class HuangJiPlanner:
"""
皇极经世时辰规划模块
基于邵雍《皇极经世》元会运世体系,计算年、月、日、时卦象,并整合决策策略
"""
# 皇极经世 60 卦序列 (剔除乾坤坎离四正卦)
SEQUENCE = [
"复", "颐", "屯", "益", "震", "噬嗑", "随", "无妄", "明夷", "贲",
"既济", "家人", "丰", "革", "同人", "临", "损", "节", "中孚", "归妹",
"睽", "兑", "履", "泰", "大畜", "需", "小畜", "大壮", "大有", "夬",
"姤", "大过", "鼎", "恒", "巽", "井", "蛊", "升", "讼", "困",
"未济", "解", "涣", "蒙", "师", "遁", "咸", "旅", "小过", "渐",
"蹇", "艮", "谦", "否", "萃", "晋", "豫", "观", "比", "剥"
]
# 卦象属性映射:(类型, 建议方向, 吉凶程度)
# 类型: 1:进取, 2:守成, 3:变动, 4:阻碍
HEX_PROPS = {
"复": (1, "万物复苏,宜制定新计划", "吉"),
"颐": (2, "关注养生与口实,宜守静", "中"),
"屯": (4, "创业维艰,宜寻求导师指引", "凶"),
"益": (1, "利涉大川,宜积极开拓", "大吉"),
"震": (3, "声震百里,宜迅速行动,防惊恐", "中"),
"噬嗑": (1, "排除障碍,宜强力执行", "中"),
"随": (3, "顺应自然,宜跟随智者", "吉"),
"无妄": (2, "不期而获,宜守正不阿", "吉"),
"明夷": (4, "黑暗降临,宜韬光养晦", "凶"),
"贲": (2, "装饰文饰,宜小事,不宜大作", "吉"),
"既济": (2, "功成名就,宜守成防衰", "吉"),
"家人": (2, "齐家有道,宜处理内部事务", "吉"),
"丰": (1, "盛大之时,宜果断决策", "大吉"),
"革": (3, "改革创新,宜去旧布新", "吉"),
"同人": (1, "志同道合,宜社交与合伙", "吉"),
"临": (1, "上亲下顺,宜视察与统筹", "吉"),
"损": (2, "减损求益,宜诚信节俭", "中"),
"节": (2, "适当节制,宜量力而行", "中"),
"中孚": (2, "诚信感应,宜签约与谈判", "吉"),
"归妹": (4, "不得其位,宜谨慎防错", "凶"),
"睽": (4, "背离异见,宜求大同存小异", "凶"),
"兑": (3, "喜悦交流,宜公关与表达", "吉"),
"履": (2, "步履维艰,宜如履薄冰", "中"),
"泰": (1, "阴阳交泰,万事亨通", "大吉"),
"大畜": (2, "积蓄德行,宜学习研究", "吉"),
"需": (2, "需待时机,宜饮食宴乐", "吉"),
"小畜": (2, "力量尚微,宜积蓄实力", "中"),
"大壮": (1, "声势壮大,宜积极进取", "吉"),
"大有": (1, "阳光普照,宜收获与扩张", "大吉"),
"夬": (1, "决断刚行,宜清除隐患", "中"),
"姤": (3, "不期而遇,防小人暗长", "中"),
"大过": (4, "负担过重,宜寻求出路", "凶"),
"鼎": (1, "革故鼎新,宜稳重创业", "吉"),
"恒": (2, "持之以恒,宜保持现状", "吉"),
"巽": (3, "柔顺随风,宜小步快走", "吉"),
"井": (2, "安分守己,宜共享资源", "中"),
"蛊": (4, "整顿内部,宜大刀阔斧", "凶"),
"升": (1, "顺势攀升,宜步步高升", "大吉"),
"讼": (4, "口舌争讼,宜讲和避争", "凶"),
"困": (4, "处境艰难,宜坚定信念", "凶"),
"未济": (3, "事业未成,宜重新出发", "中"),
"解": (3, "解危脱困,宜宽赦与行动", "吉"),
"涣": (3, "涣散疏通,宜化解矛盾", "中"),
"蒙": (2, "启蒙教育,宜寻师访友", "吉"),
"师": (1, "兴师动众,宜严格管理", "中"),
"遁": (2, "退避守静,宜隐退避害", "中"),
"咸": (1, "相互感应,宜情感交流", "吉"),
"旅": (3, "羁旅在外,宜守正防失", "中"),
"小过": (2, "过犹不及,宜小事不宜大", "中"),
"漸": (1, "循序渐进,宜长线投资", "吉"),
"蹇": (4, "前有高山,宜回身避难", "凶"),
"艮": (2, "静止止步,宜安分守己", "中"),
"谦": (2, "谦谦君子,万事大吉", "大吉"),
"否": (4, "天地不通,宜退守不出", "大凶"),
"萃": (1, "精英荟萃,宜团队建设", "吉"),
"晋": (1, "加官进爵,宜展示才华", "大吉"),
"豫": (1, "悦豫顺动,宜旅游庆贺", "吉"),
"观": (2, "观摩考察,宜深思熟虑", "中"),
"比": (2, "亲近依附,宜寻找靠山", "吉"),
"剥": (4, "剥落衰颓,宜谨慎防守", "大凶")
}
BASE_YEAR = 2024
BASE_YEAR_HEX_IDX = 30
def __init__(self, lunar_data):
self.lunar = lunar_data
self.year = int(lunar_data['date'].split('-')[0])
self.month = lunar_data['lunar_month_num']
self.day = lunar_data['lunar_day_num']
def get_year_hex(self):
offset = self.year - self.BASE_YEAR
idx = (self.BASE_YEAR_HEX_IDX + offset) % 60
return self.SEQUENCE[idx]
def get_month_hex(self):
year_hex = self.get_year_hex()
# 12个月,每个月5个卦
start_idx = (self.SEQUENCE.index(year_hex) + (self.month - 1) * 5) % 60
return self.SEQUENCE[start_idx]
def get_day_hex(self):
month_hex = self.get_month_hex()
# 月卦之后顺序排列
start_idx = self.SEQUENCE.index(month_hex)
day_offset = (self.day - 1) // 5
idx = (start_idx + day_offset) % 60
return self.SEQUENCE[idx]
def get_shichen_hex_advice(self, day_hex, shichen_idx):
"""
根据日卦和时辰序号(0-11)计算当前时段的卦象和建议
皇极经世中,日卦管 12 时辰,每爻管 2 个时辰
"""
day_idx = self.SEQUENCE.index(day_hex)
line_idx = shichen_idx // 2
# 实际上可以通过复杂的爻变逻辑,这里采用映射 SEQUENCE 以获得更丰富的动态感
# 模拟变卦:每两个时辰卦象顺延一位
shichen_hex_idx = (day_idx + shichen_idx) % 60
shichen_hex = self.SEQUENCE[shichen_hex_idx]
prop_type, prop_advice, prop_luck = self.HEX_PROPS.get(shichen_hex, (2, "宜稳重", "中"))
# 结合爻位的微调建议
line_advices = ["初爻:萌芽阶段,宜谨慎及早准备",
"二爻:渐入佳境,宜守正获益",
"三爻:过激倾向,宜适可而止",
"四爻:寻找契合,宜向上突破",
"五爻:极盛之位,宜中庸决策",
"上爻:物极必反,宜居安思危"]
return {
"hex": shichen_hex,
"luck": prop_luck,
"type": prop_type,
"advice": prop_advice,
"line_note": line_advices[line_idx]
}
def generate_schedule(self):
day_hex = self.get_day_hex()
shichens = [
("子", "23:00 - 01:00"), ("丑", "01:00 - 03:00"), ("寅", "03:00 - 05:00"),
("卯", "05:00 - 07:00"), ("辰", "07:00 - 09:00"), ("巳", "09:00 - 11:00"),
("午", "11:00 - 13:00"), ("未", "13:00 - 15:00"), ("申", "15:00 - 17:00"),
("酉", "17:00 - 19:00"), ("戌", "19:00 - 21:00"), ("亥", "21:00 - 23:00")
]
schedule = []
for i, (name, time_range) in enumerate(shichens):
advice_data = self.get_shichen_hex_advice(day_hex, i)
schedule.append({
"shichen": name,
"time": time_range,
"hex": advice_data["hex"],
"luck": advice_data["luck"],
"type": advice_data["type"],
"advice": advice_data["advice"],
"line_note": advice_data["line_note"]
})
return {
"year_hex": self.get_year_hex(),
"month_hex": self.get_month_hex(),
"day_hex": day_hex,
"schedule": schedule
}