量化程式設計技術 數學最優解

2022-07-05 03:03:13 字數 4656 閱讀 8373

from abc import

abcmeta, 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 標記為共享以導致相...