from abc importabcmeta, abstractmethod
import
siximport
numpy as np
import
pandas as pd
import
matplotlib.pyplot as plt
#每個人平均壽命期望是75年,約75*365=27375天
k_init_living_days = 27375
class
person(object):
"""人類
"""def
__init__
(self):
#初始化人平均能活的壽命
self.living =k_init_living_days
#初始化幸福指數
#初始化財富值
self.wealth =0
#初始化名望權利
self.fame =0
#活著的第幾天
self.living_day =0
deflive_one_day(self, seek):
"""每天只能進行乙個seek,這個seek決定了你今天追求的是什麼,得到了什麼
seek的型別屬於下面將編寫的baseseekday
:param seek:
:return:
"""#
呼叫每個獨特的baseseekday類都會實現的do_seek_day,得到今天的收穫
#每天要減去生命消耗,有些seek前面還會增加生命
self.living -=consume_living
#seek得到的幸福指數積累
#seek得到的財富積累
self.wealth +=wealth
#seek得到的名望權力積累
self.fame +=fame
#活完這一天了
self.living_day += 1
class
baseseekday(six.with_metaclass(abcmeta, object)):
def__init__
(self):
#每個追求每天消耗生命的常數
self.living_consume =0
#每個追求每天幸福指數常數
#每個追求每天財富積累常數
self.wealth_base =0
#每個追求每天名望權利積累常數
self.fame_base =0
#每個追求每天消耗生命的可變因素序列
self.living_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
defdo_seek_day(self):
"""每一天的追求具體seek
:return:
"""#
if self.do_seek_day_cnt >=len(self.living_factor):
#超出len(self.living_factor), 就取最後乙個living_factor[-1]
consume_living =\
self.living_factor[-1] *self.living_consume
else
:
#每個類自定義這個追求的消耗生命常數,以及living_factor,比如
#healthseekday追求健康,living_factor序列的值即由負值->正值
#每個子類living_factor會有自己特點的變化速度及序列長度,導致每個
#追求對生命的消耗隨著追求的次數變化不一
consume_living =self.living_factor[self.do_seek_day_cnt] \
*self.living_consume
# ##
#即隨著追求乙個事物的次數過多後會變的沒有幸福感
else
: ##
#財富積累=wealth_base:積累常數 * wealth_factor:可變序列
if self.do_seek_day_cnt >=len(self.wealth_factor):
#超出len(self.wealth_factor), 就取最後乙個
wealth = self.wealth_factor[-1] *self.wealth_base
else
:
#每個類自定義這個追求的財富指數常數,以及wealth_factor
wealth =self.wealth_factor[
self.do_seek_day_cnt] *self.wealth_base
#權利積累=fame_base:積累常數 * fame_factor:可變序列
if self.do_seek_day_cnt >=len(self.fame_factor):
#超出len(self.fame_factor), 就取最後乙個
fame = self.fame_factor[-1] *self.fame_base
else
:
#每個類自定義這個追求的名望權利指數常數,以及fame_factor
fame =self.fame_factor[
self.do_seek_day_cnt] *self.fame_base
#追求了多少天了這一生 + 1
self.do_seek_day_cnt += 1
#返回這個追求這一天對生命的消耗,得到的幸福,財富,名望權利
return
defregular_mm(group):
#最小-最大規範化
return (group - group.min()) / (group.max() -group.min())
class
healthseekday(baseseekday):
"""healthseekday追求健康長壽的一天:
形象:健身,旅遊,娛樂,做感興趣的事情。
抽象:追求健康長壽。
"""def
_init_self(self):
#每天對生命消耗的常數=1,即代表1天
self.living_consume = 1
#每天幸福指數常數=1
#設定可變因素序列
self._gen_living_days()
def_gen_living_days(self):
##所以大於12000次的追求都將只是單純消耗生命,並不增加幸福指數
#即隨著做一件事情的次數越來越多,幸福感越來越低,直到完全體會不到幸福
days = np.arange(1, 12000)
#基礎函式選用sqrt, 影響序列變化速度
living_days =np.sqrt(days)
"""對生命消耗可變因素序列值由-1->1, 也就是這個追求一開始的時候對生命
的消耗為負增長,延長了生命,隨著追求的次數不斷增多對生命的消耗轉為正
數因為即使乙個人天天鍛鍊身體,天天吃營養品,也還是會有自然死亡的那
一天"""#
*2-1的目的:regular_mm在0-1之間,healthseekday要結果在-1,1之間
self.living_factor = regular_mm(living_days) * 2 - 1
#結果在1-0之間 [::-1]: 將0->1轉換到1->0
#初始化我, 你一生的故事:healthseekday
me =person()
#初始化追求健康長壽快樂
seek_health =healthseekday()
while me.living >0:
#只要還活著,就追求健康長壽快樂
me.live_one_day(seek_health)
print('
只追求健康長壽快樂活了{}年,幸福指數{},積累財富{},名望權力{}
'.format
me.wealth, me.fame))
plt.plot(seek_health.living_factor *seek_health.living_consume)
plt.legend([
'living_factor
', '
'], loc='
best
')
量化程式設計技術 多執行緒和多程序
coding utf 8 date 2017 08 26 original 多程序 import itertools from concurrent.futures import processpoolexecutor result 函式,通過add done callback任務完成後呼叫 def...
Nios Flash程式設計技術
1.1 altera支援cfi flash程式設計 1.3 非支援cfi程式設計 由於我所用的nor flash晶元是am29lv320db,不再nios支援的列表,自己編輯了override檔案,但還是無法正確program進去,決定用列表支援的sst39vf800試一試,引腳相容,容量為1 4,...
DLL程式設計技術
一 dll原理 dll dynamic link library 也就是 動態鏈結庫 是乙個可以被其它應用程式共享的程式模組,其中封裝了一些可以被共享的程式或資源。它雖然包含了可執行 卻不能單獨執行,而應由相應的應用程式直接或間接呼叫。在 windows 32 中,可以將 dll 標記為共享以導致相...