我的一生模型構(gòu)建

一惶翻、知識(shí)點(diǎn)

1.matplotlib圖例legend語(yǔ)法及設(shè)置

loc 設(shè)置圖例位置 其他用法參考

https://blog.csdn.net/helunqu2017/article/details/78641290

2.seek_choice = np.random.choice([0, 1, 2], 80000, p=weights)

是指以p([0.1, 0.2, 0.7])概率隨機(jī)抽取seek_choice的[0,1,2]8000次,形成一個(gè)數(shù)組

seek_ind = seek_choice[2]提取數(shù)組第3個(gè)元素

3.n = numpy.random.random() ?生成一個(gè)0~1隨機(jī)的浮點(diǎn)數(shù)

weights/=np.sum(n) ?依據(jù)上述生成的隨機(jī)數(shù)生成比例

4.scipy 使用文檔https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_bfgs.html

二椭盏、模型

from abcimport ABCMeta, abstractmethod

import matplotlib.pyplotas plt

import six

import numpyas np

import pandasas pd

from mpl_toolkits.mplot3dimport Axes3D

K_INIT_LIVING_DAYS =27375

class Person(object):

def __init__(self):

self.living = K_INIT_LIVING_DAYS

self.happiness =0

? ? ? ? self.wealth =0

? ? ? ? self.fame =0

? ? ? ? self.living_day =0

? ? def live_one_day(self, seek):

consume_living, happiness, wealth, fame = seek.do_seek_day()

self.living -=consume_living

self.happiness += happiness

self.wealth +=wealth

self.fame +=fame

self.living_day +=1

class BaseSeekDay(six.with_metaclass(ABCMeta, object)):

def __init__(self):

self.living_consume =0

? ? ? ? self.happiness_base =0

? ? ? ? self.wealth_base =0

? ? ? ? self.fame_base =0

? ? ? ? self.living_factor = [0]

self.happiness_factor = [0]

self.wealth_factor = [0]

self.fame_factor = [0]

self.do_seek_day_cnt =0

? ? ? ? self._init_self()

@abstractmethod

? ? def _init_self(self, *args, **kwargs):

pass

? ? @abstractmethod

? ? def _gen_living_days(self, *args, **kwargs):

pass

? ? def do_seek_day(self):

if self.do_seek_day_cnt >=len(self.living_factor):

# 超出len(self.living_factor), 就取最后一個(gè)living_factor[-1]

? ? ? ? ? ? consume_living = \

self.living_factor[-1] *self.living_consume

else:

# 每個(gè)類自定義這個(gè)追求的消耗生命常數(shù),以及l(fā)iving_factor,比如

# HealthSeekDay追求健康,living_factor序列的值即由負(fù)值->正值

# 每個(gè)子類living_factor會(huì)有自己特點(diǎn)的變化速度及序列長(zhǎng)度,導(dǎo)致每個(gè)

# 追求對(duì)生命的消耗隨著追求的次數(shù)變化不一

? ? ? ? ? ? consume_living =self.living_factor[self.do_seek_day_cnt] \

*self.living_consume

# 幸福指數(shù)=happiness_base:幸福常數(shù) * happiness_factor:可變序列

? ? ? ? if self.do_seek_day_cnt >=len(self.happiness_factor):

# 超出len(self.happiness_factor), 就取最后一個(gè)

# 由于happiness_factor值由:n—>0 所以happiness_factor[-1]=0

# 即隨著追求一個(gè)事物的次數(shù)過(guò)多后會(huì)變的沒(méi)有幸福感

? ? ? ? ? ? happiness =self.happiness_factor[-1] *self.happiness_base

else:

# 每個(gè)類自定義這個(gè)追求的幸福指數(shù)常數(shù),以及happiness_factor

# happiness_factor子類的定義一般是從高->低變化

? ? ? ? ? ? happiness =self.happiness_factor[self.do_seek_day_cnt] *self.happiness_base

# 財(cái)富積累=wealth_base:積累常數(shù) * wealth_factor:可變序列

? ? ? ? if self.do_seek_day_cnt >=len(self.wealth_factor):

# 超出len(self.wealth_factor), 就取最后一個(gè)

? ? ? ? ? ? wealth =self.wealth_factor[-1] *self.wealth_base

else:

# 每個(gè)類自定義這個(gè)追求的財(cái)富指數(shù)常數(shù)牢屋,以及wealth_factor

? ? ? ? ? ? wealth =self.wealth_factor[self.do_seek_day_cnt] *self.wealth_base

# 權(quán)利積累=fame_base:積累常數(shù) * fame_factor:可變序列

? ? ? ? if self.do_seek_day_cnt >=len(self.fame_factor):

# 超出len(self.fame_factor), 就取最后一個(gè)

? ? ? ? ? ? fame =self.fame_factor[-1] *self.fame_base

else:

# 每個(gè)類自定義這個(gè)追求的名望權(quán)利指數(shù)常數(shù),以及fame_factor

? ? ? ? ? ? fame =self.fame_factor[self.do_seek_day_cnt] *self.fame_base

# 追求了多少天了這一生 + 1

? ? ? ? self.do_seek_day_cnt +=1

? ? ? ? # 返回這個(gè)追求這一天對(duì)生命的消耗槽袄,得到的幸福烙无,財(cái)富,名望權(quán)利

? ? ? ? return consume_living, happiness, wealth, fame

def regular_mm(group):

# 最小-最大規(guī)范化

? ? return (group - group.min()) / (group.max() - group.min())

class HealthSeekDay(BaseSeekDay):

"""

HealthSeekDay追求健康長(zhǎng)壽的一天:

形象:健身遍尺,旅游皱炉,娛樂(lè),做感興趣的事情狮鸭。

抽象:追求健康長(zhǎng)壽合搅。

"""

? ? def _init_self(self):

# 每天對(duì)生命消耗的常數(shù)=1,即代表1天

? ? ? ? self.living_consume =1

? ? ? ? # 每天幸福指數(shù)常數(shù)=1

? ? ? ? self.happiness_base =1

? ? ? ? # 設(shè)定可變因素序列

? ? ? ? self._gen_living_days()

def _gen_living_days(self):

# 只生成12000個(gè)序列歧蕉,因?yàn)橄旅娴膆appiness_factor序列值由1->0

# 所以大于12000次的追求都將只是單純消耗生命灾部,并不增加幸福指數(shù)

# 即隨著做一件事情的次數(shù)越來(lái)越多,幸福感越來(lái)越低惯退,直到完全體會(huì)不到幸福

? ? ? ? days = np.arange(1, 12000)

# 基礎(chǔ)函數(shù)選用sqrt, 影響序列變化速度

? ? ? ? living_days = np.sqrt(days)

"""

對(duì)生命消耗可變因素序列值由-1->1, 也就是這個(gè)追求一開(kāi)始的時(shí)候?qū)ι?/p>

的消耗為負(fù)增長(zhǎng)赌髓,延長(zhǎng)了生命,隨著追求的次數(shù)不斷增多對(duì)生命的消耗轉(zhuǎn)為正

數(shù)因?yàn)榧词挂粋€(gè)人天天鍛煉身體催跪,天天吃營(yíng)養(yǎng)品锁蠕,也還是會(huì)有自然死亡的那

一天

"""

? ? ? ? # *2-1的目的:regular_mm在0-1之間,HealthSeekDay要結(jié)果在-1,1之間

? ? ? ? self.living_factor = regular_mm(living_days) *2 -1

? ? ? ? # 結(jié)果在1-0之間 [::-1]: 將0->1轉(zhuǎn)換到1->0

? ? ? ? self.happiness_factor = regular_mm(days)[::-1]

class StockSeekDay(BaseSeekDay):

"""

StockSeekDay追求財(cái)富金錢的一天:

形象:做股票投資賺錢的事情懊蒸。

抽象:追求財(cái)富金錢

"""

? ? def _init_self(self, show=False):

# 每天對(duì)生命消耗的常數(shù)=2荣倾,即代表2天

? ? ? ? self.living_consume =2

? ? ? ? # 每天幸福指數(shù)常數(shù)=0.5

? ? ? ? self.happiness_base =0.5

? ? ? ? # 財(cái)富積累常數(shù)=10,默認(rèn)=0

? ? ? ? self.wealth_base =10

? ? ? ? # 設(shè)定可變因素序列

? ? ? ? self._gen_living_days()

def _gen_living_days(self):

# 只生成10000個(gè)序列

? ? ? ? days = np.arange(1, 10000)

# 針對(duì)生命消耗living_factor的基礎(chǔ)函數(shù)還是sqrt

? ? ? ? living_days = np.sqrt(days)

# 由于不需要像HealthSeekDay從負(fù)數(shù)開(kāi)始骑丸,所以直接regular_mm 即:0->1

? ? ? ? self.living_factor = regular_mm(living_days)

# 針對(duì)幸福感可變序列使用了np.power4舌仍,即變化速度比sqrt快

? ? ? ? happiness_days = np.power(days, 4)

# 幸福指數(shù)可變因素會(huì)快速遞減由1->0

? ? ? ? self.happiness_factor = regular_mm(happiness_days)[::-1]

"""

這里簡(jiǎn)單設(shè)定wealth_factor=living_factor

living_factor(0-1), 導(dǎo)致wealth_factor(0-1), 即財(cái)富積累越到

后面越有效率妒貌,速度越快,頭一個(gè)100萬(wàn)最難賺

"""

? ? ? ? self.wealth_factor =self.living_factor

class FameSeekDay(BaseSeekDay):

"""

FameTask追求名望權(quán)力的一天:

追求名望權(quán)力

"""

? ? def _init_self(self):

# 每天對(duì)生命消耗的常數(shù)=3铸豁,即代表3天

? ? ? ? self.living_consume =3

? ? ? ? # 每天幸福指數(shù)常數(shù)=0.6

? ? ? ? self.happiness_base =0.6

? ? ? ? # 名望權(quán)利積累常數(shù)=10灌曙,默認(rèn)=0

? ? ? ? self.fame_base =10

? ? ? ? # 設(shè)定可變因素序列

? ? ? ? self._gen_living_days()

def _gen_living_days(self):

# 只生成12000個(gè)序列

? ? ? ? days = np.arange(1, 12000)

# 針對(duì)生命消耗living_factor的基礎(chǔ)函數(shù)還是sqrt

? ? ? ? living_days = np.sqrt(days)

# 由于不需要像HealthSeekDay從負(fù)數(shù)開(kāi)始,所以直接regular_mm 即:0->1

? ? ? ? self.living_factor = regular_mm(living_days)

# 針對(duì)幸福感可變序列使用了np.power2

# 即變化速度比StockSeekDay慢但比HealthSeekDay快

? ? ? ? happiness_days = np.power(days, 2)

# 幸福指數(shù)可變因素遞減由1->0

? ? ? ? self.happiness_factor = regular_mm(happiness_days)[::-1]

# 這里簡(jiǎn)單設(shè)定fame_factor=living_factor

? ? ? ? self.fame_factor =self.living_factor

# 初始化我, 你一生的故事:HealthSeekDay

def my_life(weights):

seek_health = HealthSeekDay()

seek_stock = StockSeekDay()

seek_fame = FameSeekDay()

seek_list = [seek_health, seek_stock, seek_fame]

me = Person()

seek_choice = np.random.choice([0, 1, 2], 80000, p=weights)

while me.living >0:

seek_ind = seek_choice[me.living_day]

seek = seek_list[seek_ind]

me.live_one_day(seek)

return round(me.living_day /365, 2), round(me.happiness, 2), round(me.wealth, 2), round(me.fame, 2)

# living_day, happiness, wealth, fame = my_life([0.4, 0.3, 0.3])

# print('活了{(lán)}年节芥,幸福指數(shù){}, 積累財(cái)富{}, 名望權(quán)力{}'.format(living_day, happiness, wealth, fame))

result = []

for _in range(20):

weights = np.random.random(3)

weights /= np.sum(weights)

result.append((weights, my_life(weights)))

sorted_scores =sorted(result, key=lambda x:x[1][1], reverse=True)

living_day, happiness, wealth, fame = my_life(sorted_scores[0][0])

# print('活了{(lán)}年在刺,幸福指數(shù){}, 積累財(cái)富{}, 名望權(quán)力{}'.format

#? ? ? ? ? (living_day, happiness, wealth, fame))

#

# print('人生最優(yōu)權(quán)重:追求健康{:.3f},追求財(cái)富{:.3f},追求名望{:.3f}'.format(

#? ? ? ? sorted_scores[0][0][0], sorted_scores[0][0][1],

#? ? ? ? sorted_scores[0][0][2]))

result_show = np.array([[r[0][0], r[0][1], r[0][2], r[1][1]]for rin result])

fig = plt.figure(figsize=(9, 6))

ax = fig.gca(projection='3d')

ax.view_init(30, 60)

"""

x:追求健康長(zhǎng)壽快樂(lè)的權(quán)重, y:追求財(cái)富金錢的權(quán)重

z:追求名望權(quán)力的權(quán)重, c:color 幸福指數(shù), 顏色越深越幸福

"""

ax.scatter3D(result_show[:, 0], result_show[:, 1], result_show[:, 2],

? ? ? ? ? ? c=result_show[:, 3], cmap='spring')

ax.set_xlabel('health')

ax.set_ylabel('stock')

ax.set_zlabel('fame')

# 幸福指數(shù)

happiness_result = result_show[:, 3]

# 使用qcut分10份

print(pd.qcut(happiness_result, 10).value_counts())

plt.show()

(本文學(xué)習(xí)自阿布量化https://www.abuquant.com)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市头镊,隨后出現(xiàn)的幾起案子蚣驼,更是在濱河造成了極大的恐慌,老刑警劉巖拧晕,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異梅垄,居然都是意外死亡厂捞,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門队丝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)靡馁,“玉大人,你說(shuō)我怎么就攤上這事机久〕裟” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵膘盖,是天一觀的道長(zhǎng)胧弛。 經(jīng)常有香客問(wèn)我,道長(zhǎng)侠畔,這世上最難降的妖魔是什么结缚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮软棺,結(jié)果婚禮上红竭,老公的妹妹穿的比我還像新娘。我一直安慰自己喘落,他們只是感情好茵宪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著瘦棋,像睡著了一般稀火。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赌朋,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天憾股,我揣著相機(jī)與錄音鹿蜀,去河邊找鬼。 笑死服球,一個(gè)胖子當(dāng)著我的面吹牛茴恰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播斩熊,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼往枣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了粉渠?” 一聲冷哼從身側(cè)響起分冈,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霸株,沒(méi)想到半個(gè)月后雕沉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡去件,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年坡椒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尤溜。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡倔叼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宫莱,到底是詐尸還是另有隱情丈攒,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布授霸,位于F島的核電站巡验,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏碘耳。R本人自食惡果不足惜深碱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望藏畅。 院中可真熱鬧敷硅,春花似錦、人聲如沸愉阎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)榜旦。三九已至幽七,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間溅呢,已是汗流浹背澡屡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工猿挚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驶鹉。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓绩蜻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親室埋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子办绝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容