中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

python中leq函數 len函數python中文

python 爬蟲

驗證碼(CAPTCHA)全稱為全自動區分計算機和人類的公開圖靈測試(Completely Automated Public Turing test to tell Computersand Humans Apart)。從其全稱可以看出,驗證碼用于測試用戶是真實的人類還是計算機機器人。

在紅山等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供網站建設、成都做網站 網站設計制作按需規劃網站,公司網站建設,企業網站建設,品牌網站建設,全網營銷推廣,外貿網站建設,紅山網站建設費用合理。

1.獲得驗證碼圖片

每次加載注冊網頁都會顯示不同的驗證驗圖像,為了了解表單需要哪些參數,我們可以復用上一章編寫的parse_form()函數。

import cookielib,urllib2,pprint import form REGISTER_URL = '' cj=cookielib.CookieJar() opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) html=opener.open(REGISTER_URL).read() form=form.parse_form(html) pprint.pprint(form)

{'_formkey': 'a67cbc84-f291-4ecd-9c2c-93937faca2e2', '_formname': 'register', '_next': '/places/default/index', 'email': '', 'first_name': '', 'last_name': '', 'password': '', 'password_two': '', 'recaptcha_response_field': None} 123456789101112131415161718

上面recaptcha_response_field是存儲驗證碼的值,其值可以用Pillow從驗證碼圖像獲取出來。先安裝pip install Pillow,其它安裝Pillow的方法可以參考 。Pillow提價了一個便捷的Image類,其中包含了很多用于處理驗證碼圖像的高級方法。下面的函數使用注冊頁的HTML作為輸入參數,返回包含驗證碼圖像的Image對象。

import lxml.html from io import BytesIO from PIL import Image tree=lxml.html.fromstring(html) print tree

Element html at 0x7f8b006ba890 img_data_all=tree.cssselect('div#recaptcha img')[0].get('src') print img_data_all

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAABgCAIAAAB9kzvfAACAtklEQVR4nO29Z5gcZ5ku3F2dc865

...

rkJggg== img_data=img_data_all.partition(',')[2] print img_data

iVBORw0KGgoAAAANSUhEUgAAAQAAAABgCAIAAAB9kzvfAACAtklEQVR4nO29Z5gcZ5ku3F2dc865

...

rkJggg== binary_img_data=img_data.decode('base64') file_like=BytesIO(binary_img_data) print file_like

_io.BytesIO object at 0x7f8aff6736b0 img=Image.open(file_like) print img

PIL.PngImagePlugin.PngImageFile image mode=RGB size=256x96 at 0x7F8AFF5FAC90 12345678910111213141516171819202122232425

在本例中,這是一張進行了Base64編碼的PNG圖像,這種格式會使用ASCII編碼表示二進制數據。我們可以通過在第一個逗號處分割的方法移除該前綴。然后,使用Base64解碼圖像數據,回到最初的二進制格式。要想加載圖像,PIL需要一個類似文件的接口,所以在傳給Image類之前,我們以使用了BytesIO對這個二進制數據進行了封裝。

完整代碼:

# -*- coding: utf-8 -*-form.pyimport urllibimport urllib2import cookielibfrom io import BytesIOimport lxml.htmlfrom PIL import Image

REGISTER_URL = ''#REGISTER_URL = ''def extract_image(html):

tree = lxml.html.fromstring(html)

img_data = tree.cssselect('div#recaptcha img')[0].get('src') # remove data:image/png;base64, header

img_data = img_data.partition(',')[-1] #open('test_.png', 'wb').write(data.decode('base64'))

binary_img_data = img_data.decode('base64')

file_like = BytesIO(binary_img_data)

img = Image.open(file_like) #img.save('test.png')

return imgdef parse_form(html):

"""extract all input properties from the form

"""

tree = lxml.html.fromstring(html)

data = {} for e in tree.cssselect('form input'): if e.get('name'):

data[e.get('name')] = e.get('value') return datadef register(first_name, last_name, email, password, captcha_fn):

cj = cookielib.CookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

html = opener.open(REGISTER_URL).read()

form = parse_form(html)

form['first_name'] = first_name

form['last_name'] = last_name

form['email'] = email

form['password'] = form['password_two'] = password

img = extract_image(html)#

captcha = captcha_fn(img)#

form['recaptcha_response_field'] = captcha

encoded_data = urllib.urlencode(form)

request = urllib2.Request(REGISTER_URL, encoded_data)

response = opener.open(request)

success = '/user/register' not in response.geturl() #success = '/places/default/user/register' not in response.geturl()

return success12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152

2.光學字符識別驗證碼

光學字符識別(Optical Character Recognition, OCR)用于圖像中抽取文本。本節中,我們將使用開源的Tesseract OCR引擎,該引擎最初由惠普公司開發的,目前由Google主導。Tesseract的安裝說明可以從 獲取。然后可以使用pip安裝其Python封裝版本pytesseractpip install pytesseract。

下面我們用光學字符識別圖像驗證碼:

import pytesseract import form img=form.extract_image(html) pytesseract.image_to_string(img)'' 123456

如果直接把驗證碼原始圖像傳給pytesseract,一般不能解析出來。這是因為Tesseract是抽取更加典型的文本,比如背景統一的書頁。下面我們進行去除背景噪音,只保留文本部分。驗證碼文本一般都是黑色的,背景則會更加明亮,所以我們可以通過檢查是否為黑色將文本分離出來,該處理過程又被稱為閾值化。

img.save('2captcha_1original.png') gray=img.convert('L') gray.save('2captcha_2gray.png') bw=gray.point(lambda x:0 if x1 else 255,'1') bw.save('2captcha_3thresholded.png') 1234567

這里只有閾值小于1的像素(全黑)都會保留下來,分別得到三張圖像:原始驗證碼圖像、轉換后的灰度圖和閾值化處理后的黑白圖像。最后我們將閾值化處理后黑白圖像再進行Tesseract處理,驗證碼中的文字已經被成功抽取出來了。

pytesseract.image_to_string(bw)'language' import Image,pytesseract img=Image.open('2captcha_3thresholded.png') pytesseract.image_to_string(img)'language' 123456789

我們通過示例樣本測試,100張驗證碼能正確識別出90張。

import ocr ocr.test_samples()

Accuracy: 90/100 1234

下面是注冊賬號完整代碼:

# -*- coding: utf-8 -*-import csvimport stringfrom PIL import Imageimport pytesseractfrom form import registerdef main():

print register('Wu1', 'Being1', '[email protected]', 'example', ocr)def ocr(img):

# threshold the image to ignore background and keep text

gray = img.convert('L') #gray.save('captcha_greyscale.png')

bw = gray.point(lambda x: 0 if x 1 else 255, '1') #bw.save('captcha_threshold.png')

word = pytesseract.image_to_string(bw)

ascii_word = ''.join(c for c in word if c in string.letters).lower() return ascii_wordif __name__ == '__main__':

main()1234567891011121314151617181920212223

我們可以進一步改善OCR性能:

- 實驗不同閾值

- 腐蝕閾值文本,突出字符形狀

- 調整圖像大小

- 根據驗證碼字體訓練ORC工具

- 限制結果為字典單詞

入基變量可以是負數嗎?

一般模型既有不等式約束,也有等式約束;既有非負的約束決策變量,也有整個實數域上的自由決策變量。

標準模型

引入冗余的決策變量,使得不等式約束轉化為等式約束。這里的每個決策變量都具有非負性。

在這里插入圖片描述

把上述模型用矩陣表示就是

m i n ( o r m a x ) C T X s . t A X = b ? X ≥ 0 min(or\ max) C^TX\\ s.t \ AX=\vec{b}\\ \ X \geq 0

min(or max)C

T

X

s.t AX=

b

X≥0

線性規劃問題的基本假設

系數矩陣A的行向量線性無關。

如果線性相關有2種可能,要么是增廣矩陣的該行也線性相關,則該行約束冗余,可以刪去。要么增廣矩陣的該行線性無關,則方程無解,優化問題不存在。

系數矩陣A的行數小于列數

如果行數m大于列數n,則行向量是m個n維向量,不可能線性無關。吐過行數等于列數,且行向量線性無關,則約束條件確定了唯一解,無需優化。

一般模型與標準模型的轉化

主要方式是增加決策變量。有兩種情況需要增加

不等式變等式,每個不等式增加一個決策變量。

1個自由決策變量轉化為2個約束的決策變量。

在這里插入圖片描述

線性規劃問題解的可能情況

唯一最優解

沒有有限的最優目標函數

沒有可行解

無窮多的最優解(一維問題中不會出現)

凸集

Def. 凸集:該集合中任意兩個元素的凸組合仍然屬于該集合。

在這里插入圖片描述

注:此處的α \alphaα不能是0或1。

Thm. 線性規劃的多面體模型是凸集。

Def. 凸集的頂點:頂點無法表示成集合中其他元素的凸組合。

在這里插入圖片描述

頂點的等價描述

從系數矩陣中抽取m列線性無關的列向量,組成可逆方陣。則由此可求得m個決策變量的值,再令其余的決策變量為0即可。

推論

頂點中正分量對應的系數向量線性無關。

一個線性規劃問題標準模型最多有C n m C_{n}^{m}C

n

m

個頂點。

定義總結

基矩陣§:系數矩陣中抽取m列線性無關的列向量組成可逆方陣。

基本解:m個基變量有基矩陣和b ? \vec{b}

b

決定,剩余(n-m)個變量都置0,稱之為非基變量。

基本可行解(頂點):基本解中可行的,即滿足非負性約束

Thm. 線性規劃標準模型的基本可行解就是可行集的頂點。

Thm. 標準模型的線性規劃問題如有可行解,則定有基本可行解。

Thm. 線性規劃標準模型中頂點的個數是有限的。

Thm. 線性規劃標準模型的最優目標函數值如果有有限的目標函數值,則總在頂點處取到。

單純形法

在頂點中沿著邊搜索最優解的過程。

按照上述的原理,我們固然可以求出所有的基矩陣,進入求出所有的頂點。計算每一個頂點的目標函數值,找出其中最大的那個,但是這樣做的計算量未免太大,因此有了單純行法,即沿著邊搜索頂點。

在這里插入圖片描述

單純形法就是一個不斷的選擇變量入基出基的過程。

假定已知一個基本可行解。(問題4)

如何計算選定進基變量后的基本可行解。(問題1)

如何選擇進基變量使得目標函數值改善。(問題2)

如何判斷已經找到最優的目標函數值。(問題3)

計算選定進基變量的基本可行解

Def. 基本可行解的表示式:基變量只出現在一個等式約束中。如:

在這里插入圖片描述

此處的x 3 , x 4 , x 5 x_3,x_4,x_5x

3

,x

4

,x

5

就是基變量。

選定出基變量:保可行性的最小非負比值原理

由上所述,一個頂點對應一個基本可行解,其中m個基變量,(n-m)個非基變量。假定我們要選擇某個非基變量x i x_ix

i

入基,實際上就是通過對增廣矩陣做初等行變化使得x i x_ix

i

僅僅出現在一個等式約束中。比如我們通過變換,使得x i x_ix

i

僅僅出現在第j個等式約束中,如果此時仍然滿足可行性,那么x i x_ix

i

就取代了原來在此處的基變量,成為新的基變量。

在進行初等行變換的過程中,要保證可行性,即

b ? ≥ 0 \vec{b} \geq 0

b

≥0

。因此要選擇最小非負比值。請看下面的例子:

在這里插入圖片描述

假設我們要選擇x 2 x_2x

2

入基,那么就是要通過初等行變換,使得x 2 x_2x

2

的系數向量中某一行是1,其余行都是0。如我們選擇x 2 x_2x

2

僅出現在第3個等式約束中,即

在這里插入圖片描述

則此時無法保證可行性,因為b ? \vec{b}

b

中第1個分量是負數。

為了避免等式右側出現負數,只能選擇比值最小的一行,即第1行。即化成如下的形式:

在這里插入圖片描述

如果此時我們想讓x 3 x_3x

3

入基,此時的最小比值是第2行,即讓該行為1,其余行為0。但是,為了讓x 3 x_3x

3

的第二行為1,該行兩端必須同時乘以一個負數,此時仍然無法保證b ? ≥ 0 \vec{b} \geq0

b

≥0,因此只能選擇系數非負的一行。

注:這里的非負性是指系數非負,而不是比值非負。即當b中某行分量是0,而該行入基變量系數是負數,仍不能入基。

在這里插入圖片描述

特殊情況:沒有非負比值,即沒有有限的目標函數值。

在這里插入圖片描述

選擇入基變量的原則

選擇某個入基變量使得目標函數能改善,通過檢驗數選擇。

此處假設優化目標是求最大值。通過等式約束,將目標函數表示成非基變量的線性組合。即

f ( X ) = c 1 x j ( m + 1 ) + c 2 x j ( m + 2 ) + . . . + c n x j ( n ) + c o n s t f(X)=c_1x_{j(m+1)}+c_2x_{j(m+2)}+...+c_nx_{j(n)}+const

f(X)=c

1

x

j(m+1)

+c

2

x

j(m+2)

+...+c

n

x

j(n)

+const

只有選擇檢驗數是正數的變量入基才有可能使得目標函數繼續增大,因為入基之后變量只可能增大或者不變,而不可能減少。

如何確定已經找到了最優的目標函數值

此處假設優化目標是求最大值。

當每個非基變量的檢驗數都是負數時,目標函數已經達到了最大值。

退化情況

Thm. 收斂條件:每次迭代過程中,每個基本可行解的基變量都嚴格大于0,則每次迭代都能保證目標函數嚴格增加。而基本可行解的數目是有限的,因此上述過程不會一直進行下去,因此一定能在有限次迭代過程中找到最優解。

Def. 退化情況:某些基變量是0。則多個基矩陣對應同一個退化的頂點。

Thm. 循環迭代導致不收斂:多個基矩陣對應一個頂點,即每次出基入基都換了基矩陣,但是對應的退化頂點不變,即目標函數也不變。因此可能出現在幾個基矩陣之間循環不止的情況。

避免退化:由于頂點的個數是有限的,我們只需標記那些已經迭代過的頂點,即可避免循環。

**bland法則:**始終選擇下標最小的可入基和出基的變量。

當所有的基變量都嚴格大于0時,則這個基矩陣對應于非退化的頂點,此時可行基矩陣和頂點是一一對應的;

當某些基變量為0時,則這個基矩陣對應退化的頂點,一個退化的頂點對應數個可行基矩陣。

即給定一個可行基矩陣,一定能確定一個頂點,但是給定一個頂點時,其對應的基矩陣可能不唯一。

更一般地說,當頂點非退化時,可行基矩陣唯一;否則可行基矩陣不唯一。

如何確定初始的基本可行解

先將一般模型轉化為標準模型,然后添加人工變量,在迭代過程中將人工變量都變成非基變量,則基變量就只剩下原來的變量。

在這里插入圖片描述

大M法在這里插入圖片描述

兩階段法

在這里插入圖片描述

例題

本質就是不斷的迭代單純型表

在這里插入圖片描述

在這里插入圖片描述

一般線性規劃問題總結

一般模型轉化為標準型

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

基于單純型表迭代的實質

求出非基變量的檢驗數

σ j ( k ) = c j ( k ) ? C B T B ? 1 P j ( k ) m + 1 ≤ k ≤ n \sigma_{j(k)}=c_{j(k)}-C_{B}^{T}B^{-1}P_{j(k)}\ m+1 \leq k \leq n

σ

j(k)

=c

j(k)

?C

B

T

B

?1

P

j(k)

m+1≤k≤n

確定進基變量

σ j ( t ) = m a x { σ j ( m + 1 ) , σ j ( m + 2 ) , . . . σ j ( n ) } \sigma_{j(t)} = max\{\sigma_{j(m+1)},\sigma_{j(m+2)},...\sigma_{j(n)}\}

σ

j(t)

=max{σ

j(m+1)

j(m+2)

,...σ

j(n)

}

確定出基變量

在這里插入圖片描述

得到新的可行基矩陣

在這里插入圖片描述

基于逆矩陣的單純形法

在這里插入圖片描述

核心問題:如何基于B ? 1 B^{-1}B

?1

計算出B ? 1 ~ \tilde{B^{-1}}

B

?1

~

。這兩個矩陣僅僅有1列不一樣,這是一個線性代數問題,與本課程的主要內容無關,此處不再贅述。

總結:單純形法中可能遇到的3中特殊情況。

1. 退化問題:某些基變量為0

退化問題的現象是某些基變量為0,本質是一個退化的頂點對應多個可行基矩陣,后果是可能使得單純形法不收斂。

在選擇入基變量時,應該遵循blend法則,即每次選擇可入基變量下標最小的那個。

2. 沒有最小非負比值。

當選定入基變量后,需要根據“保證可行性的最小非負比值原理”選定出基變量,如果沒有非負比值,則說明該變量可以趨于無窮,則該問題沒有有限的最優目標函數值。

3. 某個非基變量的檢驗數為0.

在選擇入基變量時,需要將目標函數表示成非基變量的表達式。以目標值是求最大問題的為例,此時應該選擇檢驗數大于0的非基變量入基才能改善目標函數值。

當所有非基變量的檢驗數都為小于等于0的時候,無論選擇誰入基,都會值得目標函數變得更差,因此這時候就達到了最優條件。

有一種特殊情況是某個非基變量的檢驗數為0,如果選取該變量入基,則目標函數值和原來一樣,但是我們得到另一組不同的基本可行解,即最優目標函數值對應了多個基本可行解,這說明原問題有無窮多最優解。

4. 退化問題和非基變量檢驗數為0.

前者是一個頂點對應多個可行基矩陣,后者是最優目標函數值對應多個頂點。

前者可能導致單純形法不收斂,后者說明該問題有無窮多解。

文章知識點與官方知識檔案匹配

算法技能樹首頁概覽

31789 人正在系統學習中

打開CSDN,閱讀體驗更佳

最優化技術——線性規劃

最優化技術——線性規劃 線性規劃基本概念 線性規劃問題就是在一組線性約束條件下,求解目標函數最優解的問題 標準形式 線性規劃問題的標準形式: 目標函數求最大值 所有約束條件均由等式表示 每個約束條件右端常數常為非負值 所有決策變量為非負值 改造方法 所有的情況與改造方法 目標函數求最小值則應該改為求最大值: 方法——添加負號: minF=Σcjxj→maxF=?Σcjxj min F ...

繼續訪問

線性規劃和對偶規劃學習總結

在學習列生成和分解算法的時候,會頻繁用到線性規劃和對偶的知識,可以說LP和DP是基礎。因此理解線性規劃和對偶的本質是很重要的。 單純形法是純代數運算,從一個頂點跳到另一個頂點;且我們知道最優解一定在頂點取得,可是為什么在頂點一定會取得最優解?為什么從一個頂點跳到另一頂點,通過進基出基就可以實現,它倆為什么是一一對應的?除此以外,在分解算法中的極點和極射線和LP的解是什么樣的對應關系? 這些問題,應該說必須了解了線性規劃和對偶的本質才能夠深刻理解,而不至于陷入機械無腦的計算。大概看了慕課的課程,感覺山東大

繼續訪問

最新發布 03 線性規劃模型

03 線性規劃模型

繼續訪問

第五章 線性規劃方法 Linear Programming

第五章 線性規劃方法 Linear Programming5.1 線性規劃問題的一般形式5.2 線性規劃問題的解5.2.1 基本解的產生與轉換5.2.2 基本可行解的產生與轉換5.2.3 基本可行解的變換條件1. 最優性條件2. 非負性條件5.3 單純形算法 The Simplex Method 5.1 線性規劃問題的一般形式 5.2 線性規劃問題的解 基本解: 只滿足約束方程的解。 基本可行解: 同時滿足約束方程和變量非負約束的解。 最優解: 使目標函數取得最小值的基本可行解。 5.2.1 基本解的產生與

繼續訪問

關于數學建模中線性規劃總結

一、python方法解決 from scipy import optimize as op import numpy as np c=np.array([2,3,-5]) c = np.array([2,3,-5]) A = np.array([[-2,5,-1],[1,3,1]]) b= np.array([-10,12]) Aeq = np.array([[1,1,1]]) beq = np.array([7]) #求解 res = op.linprog(-c,A,b,Aeq,beq) print(

繼續訪問

八、線性規劃 頂點、極值點和基本可行解決方案

假設我們正在求解方程形式的一般線性程序: 這里,是一個的矩陣,,,今天,我們將假設 的行是線性獨立的。 (如果不是,那么系統 沒有解,或者某些方程是多余的。在第一種情況下,我們只是忘記分析這樣的線性程序;在第二種情況下,我們可以從刪除冗余行。) 我們已經非正式地說過,基本可行的解決方案是“盡可能多的變量”為0。這不是很精確:在某些情況下(由于退化),可能有異常多的0值,并且我們不希望這與我們的定義混淆。 相反,我們進行如下定義。 選擇一些列(或變量) 的 做為

繼續訪問

【算法設計zxd】第3章迭代法04 線性規劃

線性規劃 研究線性約束條件下線性目標函數 的極值問題的數學理論和方法。 線性規劃問題形式化表達 目標函數 約束條件 線性規劃問題的可行性解 線性規劃問題的可行區域 線性規劃問題的最優解(x1,x2,……,xn的值) 線性規劃問題的最優值 ? 單純形算法特點 (1) 只對約束條件的若干組合進行測試,測試的毎一步都使 目標函數的值向期望值逼近; (2) 一般經過不大于m或n次迭代就可求得最優解。 ?線性規劃標準形式 (1)它必須是一個最大化問題。如果是..

繼續訪問

線性規劃部分概念及重要性質(運籌學導論筆記)

模型解的術語 可行解:滿足所有約束條件的解 非可行解:至少一個約束條件不被滿足的解 可行域:所有可行解的集合 最優解:目標函數取得最有價值的可行解 頂點可行解(CPF):位于可行域頂點的解 頂點可行解與最優解的關系:考慮任意具有可行解與有界可行域的線性規劃問題,一定具有頂點可行解和至少一個最優解,而且,最優的頂點可行解一定是最優解;因此,若一個問題恰有一個最優解,它一定是頂點可行解,若一個問題有多個最優解,其中至少兩個一定是頂點可行解 比例性假設:每個活動對于目標函數值Z的貢獻與活動級別xj成比例的 可加性

繼續訪問

Mathematics for Machine Learning--學習筆記(線性無關)

1.5 Linear Independence(線性無關) ??接下來就要學習如何處理向量了。首先,我們先介紹線性組合和線性無關的概念。 Linear Combination(線性組合):存在一個向量空間V和有限的x1,??,xk∈Vx_1,\cdots,x_k\in Vx1,?,xk∈V.每一個元素vvv都有如下形式:v=λ1x1+?+λkxk=∑i=1kλixi∈Vv=\lambda_1 x_1+\cdots+\lambda_k x_k=\sum_{i = 1}^{k} {\lambda_i x_i

繼續訪問

線性規劃——規范型,標準型,基陣、基本解、基本可行解、基變量、非基變量.... 概念梳理

文章目錄前言最優化—線性規劃模型問題線性規劃模型的一般形式(min)線性規劃規范形式線性規劃標準型模型的轉換線性規劃中的規律規范形式頂點的數學描述標準形式頂點的數學描述標準形式頂點的等價描述之一標準形式頂點的等價描述之二線性規劃標準形式的一些基本概念線性規劃標準形式的基本定理 前言 此總結參考 清華 王煥剛老師的教程。 最優化—線性規劃 模型問題 線性規劃模型的一般形式(min) min?∑j=1ncjxj s.t. ∑j=1naijxj=bi,?1≤i≤p∑j=1naijxj≥bi,?

繼續訪問

最優化——線性規劃總結1(線性規劃標準型,規范型,頂點)

線性規劃的形式 標準型 規范型 線性規劃的求解思路 前提條件 線性規劃:凸優化(凸集上的凸函數的優化) 線性規劃的可行集是凸集,優化函數是凸函數(仿射函數嘛) 總有頂點是最優解,所有頂點組成的集合總是有限集,所以可以在頂點集中找到最優解。 主要思路 根據前提條件來看,我們求解線性規劃的思路:找到所有的頂點,在頂點中找到最優的那個,就是最優解。相當于縮小了搜索范圍。 怎么搞 首先計算頂點:頂點是改點所有起作用約束構成的線性方程組的唯一解。 因為所有的線性規劃形式都能轉換成標準型,所以這里只考慮標準型的

繼續訪問

線性規劃圖解法求最優解_高考數學【線性規劃】知識點相關解析~

一、知識梳理1、目標函數:P=2x+y是一個含有兩個變量x和y的函數,稱為目標函數。2、可行域:約束條件表示的平面區域稱為可行域。3、整點:坐標為整數的點叫做整點。4、線性規劃問題:求線性目標函數在線性約束條件下的最大值或最小值的問題,通常稱為線性規劃問題。只含有兩個變量的簡單線性規劃問題可用圖解法來解決。5、整數線性規劃:要求量整數的線性規劃稱為整數線性規劃。二、疑難知識導析線性規劃是...

繼續訪問

算法最優化(2)線性規劃問題中的常見概念辨析:可行解,最優解,基,基向量,非基向量,基變量,非基變量等等

zz

繼續訪問

【線性規劃】基本概念

線性規劃的概念 線性規劃(Linear Programming 簡記 LP)是了運籌學中數學規劃的一個重要分支。自從 1947 年 G. B. Dantzig 提出 求解線性規劃的單純形法以來,線性規劃在理論上趨向成熟,在實用中由于計算機能處理成千上萬個約束條件和決策變量的線性規劃問題之后,線性規劃現代管理中經常采用的基本方法之一。 在解決實際問題時,需要把問題歸結成一個線性規劃數學模型,關鍵及難點在于選適當的決策變量建立恰當的模型,這直接影響到問題的求解。 線性規劃問題的目標函數及約束條件均為線性函數;約

繼續訪問

【運籌學】什么是基變量?對于線性規劃問題中“基”概念的理解(3月3日學習筆記)

在學習《線性規劃與目標規劃》的過程中,課程的主講老師郭韌給出了對于基概念的定義如下圖 圖片來源:運籌學(中國大學mooc網) 由此我產生了幾個疑惑:1.如何理解B是線性規劃問題的一個基?2.為什么說最多有CnmC_n^mCnm個基呢? 1.如何理解B是線性規劃問題的一個基?1.如何理解B是線性規劃問題的一個基?1.如何理解B是線性規劃問題的一個基? 在回答第一個...

繼續訪問

【運籌學】線性規劃 最優解分析 ( 唯一最優解 | 無窮多最優解 | 無界解 | 無可行解 | 迭代范圍 | 求解步驟 )

一、唯一最優解、 二、無窮多最優解、 三、無界解、 四、無可行解、 五、線性規劃迭代范圍、 六、線性規劃求解步驟

繼續訪問

線性規劃與非線性規劃的求解

單純形法求解線性規劃 一、大M法求解線性規劃的原理 (1)、大M法首先將線性規劃問題化為標準型。如果約束方程組中包含有一個單位矩陣I,那么已經得到了一個初始可行基。否則在約束方程組的左邊加上若千個非負的人工變量,使人工變量對應的系數列向量與其它變量的系數列向量共同構成-一個單位矩陣。以單位矩陣為初始基,即可求得一-個初始的基本可行解。 為了求得原問題的初始基本可行解,必須盡快通過迭代過程把人工變量...

繼續訪問

熱門推薦 線性規劃算法詳解

線性規劃 首先什么是線性規劃,大致的定義我總結為在線性的目標和約束中,找出一個最優解。 舉個例子: M1和M2兩種原料用于生產內外墻涂料,M1日最大可用量24噸,M2日最大可用量為6噸,外墻涂料每噸需要6噸M1,1噸M2,內墻涂料每噸需要4噸M12,噸M2,外墻涂料每噸利潤5個單位,內墻涂料每噸利潤4個單位。且市場需求調查數據得出,內墻日需求量不超過外墻的日需求量+1噸,內墻最大日需求量為...

繼續訪問

運籌學 —線性規劃總結

線性規劃問題 1. 概述 線性規劃問題是在一組線性約束下,求資源配置的最大最小值的問題。 直觀的變現是在一個約束條件圍成的區域上尋找一個點,這個點使得資源配置最優化: 2. 線性規劃的思想 線性規劃的思路是將不等式轉換為等式,最終求得一個滿足等式的解。 下面的約束式必然可以轉換為[P|N]*X=B的形式,這里P是線性無關的M*M的方正。

繼續訪問

最優化——退化和某個非基變量檢驗數為零

文章目錄退化和某個非基變量檢驗數為零退化問題退化問題的本質某個非基變量檢驗數為零 退化和某個非基變量檢驗數為零 退化問題 基本可行解的基變量數值等于0。 退化問題的本質 多個可行基陣對應于一個基本可行解。 某個非基變量檢驗數為零 對于求max的線性規劃問題,如果所有檢驗數均滿足 則說明已經得到最優解, 若此時某非基變量的檢驗數為零 ,則說明該優化問題有無窮多最優解。 ...

如何根據概率密度函數生成隨機數

如何根據概率密度函數生成隨機數

我這里并不是要講“偽隨機”、“真隨機”這樣的問題,而是關于如何生成服從某個概率分布的隨機數(或者說 sample)的問題。比如,你想要從一個服從正態分布的隨機變量得到 100 個樣本,那么肯定抽到接近其均值的樣本的概率要大許多,從而導致抽到的樣本很多是集中在那附近的。當然,要解決這個問題,我們通常都假設我們已經有了一個 生成 0 到 1 之間均勻分布的隨機數的工具,就好像 random.org 給我們的結果那樣,事實上許多時候我們也并不太關心它們是真隨機數還是偽隨機數,看起來差不多就行了。 :p

現在再回到我們的問題,看起來似乎是很簡單的,按照概率分布的話,只要在概率密度大的地方多抽一些樣本不就行了嗎?可是具體要怎么做呢?要真動起手 來,似乎有不是那么直觀了。實際上,這個問題曾經也是困擾了我很久,最近又被人問起,那我們不妨在這里一起來總結一下。為了避免一下子就陷入抽象的公式推 導,那就還是從一個簡單的具體例子出發好了,假設我們要抽樣的概率分布其概率密度函數為 p(x) = \frac{1}{9}x^2 ,并且被限制在區間 [0, 3] 上,如右上圖所示。

好了,假設現在我們要抽 100 個服從這個分布的隨機數,直觀上來講,抽出來的接近 3 的數字肯定要比接近 0 的數字要多。那究竟要怎樣抽才能得到這樣的結果呢?由于我們實際上是不能控制最原始的隨機數生成過程的,我們只能得到一組均勻分布的隨機數,而這組隨機數 的生成過程對于我們完全是透明的,所以,我們能做的只有把這組均勻分布的隨機數做一些變換讓他符合我們的需求。找到下手的點了,可是究竟要怎樣變換呢?有 一個變換相信大家都是很熟悉的,假設我們有一組 [0,1] 之間的均勻分布的隨機數 X_0 ,那么令 X_1=3X_0 的話,X_1 就是一組在 [0,3] 之間均勻分布的隨機數了,不難想象,X_1 等于某個數 x^* 的概率就是 X_0 等于 x^*/3 的概率(“等于某個數的概率”這種說法對于連續型隨機變量來說其實是不合適的,不過大概可以理解所表達的意思啦)。似乎有一種可以“逆轉回去”的感覺了。

于是讓我們來考慮更一般的變換。首先,我們知道 X_1 的概率密度函數是 f(x) = 1/3, x\in[0,3] ,假設現在我們令 Y = \phi (X_1) ,不妨先假定 \phi(\cdot) 是嚴格單調遞增的函數,這樣我們可以求其逆函數 \phi^{-1}(\cdot) (也是嚴格單調遞增的)。現在來看變換后的隨機變量 Y 會服從一個什么樣的分布呢?

這里需要小心,因為這里都是連續型的隨機變量,并不像離散型隨機變量那樣可以說成“等于某個值的概率”,因此我們需要轉換為概率分布函數來處理,也就是求一個積分啦:

\displaystyle F(x) = P(X \leq x) = \int_{-\infty}^x f(t)dt

那么 X_1 的概率分布函數為 F(x) = \frac{1}{3}x 。很顯然 Y 小于或等于某個特定的值 y^* 這件事情是等價于 X_1=\phi^{-1}(Y)\leq\phi^{-1}(y^*) 這件事情的。換句話說,P(Y\leq y^*) 等于 P(X_1 \leq \phi^{-1}(y^*)) 。于是,Y 的概率分布函數就可以得到了:

\displaystyle G(y) = P(Y \leq y) = P(X_1 \leq \phi^{-1}(y)) = F(\phi^{-1}(y))

再求導我們就能得到 Y 的概率密度函數:

\displaystyle g(y) = \frac{dG(y)}{dy} = f(\phi^{-1}(y))\fracuejizk9{dy}\phi^{-1}(y)

這樣一來,我們就得到了對于一個隨機變量進行一個映射 \phi(\cdot) 之后得到的隨即變量的分布,那么,回到我們剛才的問題,我們想讓這個結果分布就是我們所求的,然后再反推得 \phi(\cdot) 即可:

\displaystyle \frac{1}{9}y^2 = g(y) = f(\phi^{-1}(y))\fracuejizk9{dy}\phi^{-1}(y) = \frac{1}{3}\fracuejizk9{dy}\phi^{-1}(y)

經過簡單的化簡就可以得到 \phi^{-1}(y) = \frac{1}{9} y^3 ,亦即 \phi(x) = (9x)^{1/3} 。也就是說,把得到的隨機數 X_1 帶入到到函數 \phi(\cdot) 中所得到的結果,就是符合我們預期要求的隨機數啦! :D 讓我們來驗證一下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

#!/usr/bin/python import numpy as np import matplotlib.pyplot as plot N = 10000 X0 = np.random.rand(N) X1 = 3*X0 Y = np.power(9*X1, 1.0/3) t = np.arange(0.0, 3.0, 0.01) y = t*t/9 plot.plot(t, y, 'r-', linewidth=1) plot.hist(Y, bins=50, normed=1, facecolor='green', alpha=0.75)plot.show()

這就沒錯啦,目的達成啦!讓我們來總結一下。問題是這樣的,我們有一個服從均勻分布的隨機變量 X ,它的概率密度函數為一個常數 f(x)=C ,如果是 [0,1] 上的分布,那么常數 C 就直接等于 1 了。現在我們要得到一個隨機變量 Y 使其概率密度函數為 g(y) ,做法就是構造出一個函數 \phi(\cdot) 滿足(在這里加上了絕對值符號,這是因為 \phi(\cdot) 如果不是遞增而是遞減的話,推導的過程中有一處就需要反過來)

\displaystyle g(y) = f(\phi^{-1}(y))\left|\fracuejizk9{dy}\phi^{-1}(y)\right| = C\left|\fracuejizk9{dy}\phi^{-1}(y)\right|

反推過來就是,對目標 y 的概率密度函數求一個積分(其實就是得到它的概率分布函數 CDF ,如果一開始就拿到的是 CDF 當然更好),然后求其反函數就可以得到需要的變換 \phi(\cdot) 了。實際上,這種方法有一個聽起來稍微專業一點的名字:Inverse Transform Sampling Method 。不過,雖然看起來很簡單,但是實際操作起來卻比較困難,因為對于許多函數來說,求逆是比較困難的,求積分就更困難了,如果寫不出解析解,不得已只能用數 值方法來逼近的話,計算效率就很讓人擔心了。可事實上也是如此,就連我們最常見的一維標準正態分布,也很難用這樣的方法來抽樣,因為它的概率密度函數

\displaystyle g(y) = \frac{1}{\sqrt{2\pi}}e^{-\frac{1}{2}y^2}

的不定積分沒有一個解析形式。這可真是一點也不好玩,費了這么大勁,結果好像什么都干不了。看來這個看似簡單的問題似乎還是比較復雜的,不過也不要灰心,至少對于高斯分布來說,我們還有一個叫做 Box Muller 的方法可以專門來做這個事情。因為高斯分布比較奇怪,雖然一維的時候概率分布函數無法寫出解析式,但是二維的情況卻可以通過一些技巧得出一個解析式來。

首先我們來考慮一個二維的且兩個維度相互獨立的高斯分布,它的概率密度函數為

\displaystyle f(x,y) = \frac{1}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}\cdot\frac{1}{\sqrt{2\pi}}e^{-\frac{y^2}{2}} = \frac{1}{2\pi}e^{-\frac{x^2+y^2}{2}}

這個分布是關于原點對稱的,如果考慮使用極坐標 (\theta,r) (其中 \theta\in[0,2\pi), r\in[0,\infty) )的話,我們有 x = r\cos\theta,y=r\sin\theta 這樣的變換。這樣,概率密度函數是寫成:

\displaystyle f(\theta,r) = \frac{1}{2\pi}e^{-\frac{r^2}{2}}

注意到在給定 r 的情況下其概率密度是不依賴于 \theta 的,也就是說對于 \theta 來說是一個均勻分布,這和我們所了解的標準正態分布也是符合的:在一個圓上的點的概率是相等的。確定了 \theta 的分布,讓我們再來看 r,用類似于前面的方法:

\displaystyle \begin{aligned} P(rR) = \int_0^{2\pi}\int_0^R\frac{1}{2\pi}e^{\frac{r^2}{2}}rdrd\theta \ = \int_0^Re^{-\frac{r^2}{2}}rdr \ = 1-e^{-\frac{R^2}{2}} \end{aligned}

根據前面得出的結論,我現在得到了 r 的概率分布函數,是不是只要求一下逆就可以得到一個 \phi(\cdot) 了?亦即 \phi(t) = \sqrt{-2\log (1-t)} 。

現在只要把這一些線索串起來,假設我們有兩個相互獨立的平均分布在 [0,1] 上的隨機變量 T_1 和 T_2 ,那么 2\pi T_1 就可以得到 \theta 了,而 \phi(T_2) = \sqrt{-2\log(1-T_2)} 就得到 r 了(實際上,由于 T_2 和 1-T_2 實際上是相同的分布,所以通常直接寫為 \sqrt{-2\log T_2})。再把極坐標換回笛卡爾坐標:

\displaystyle \begin{aligned} x = r\cos\theta = \sqrt{-2\log T_2}\cdot \cos(2\pi T_1) \ y = r\sin\theta = \sqrt{-2\log T_2}\cdot \sin(2\pi T_1) \end{aligned}

這樣我們就能得到一個二維的正態分布的抽樣了。可以直觀地驗證一下,二維不太好畫,就畫成 heatmap 了,看著比較熱的區域就是概率比較大的,程序如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

#!/usr/bin/python import numpy as np import matplotlib.pyplot as plot N = 50000 T1 = np.random.rand(N) T2 = np.random.rand(N) r = np.sqrt(-2*np.log(T2)) theta = 2*np.pi*T1 X = r*np.cos(theta) Y = r*np.sin(theta) heatmap, xedges, yedges = np.histogram2d(X, Y, bins=80) extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]] plot.imshow(heatmap, extent=extent) plot.show()

畫出來的圖像這個樣子:

不太好看,但是大概的形狀是可以看出來的。其實有了二維的高斯分布,再注意到兩個維度在我們這里是相互獨立的,那么直接取其中任意一個維度,就是一個一維高斯分布了。如下:

如果 X\sim N(0,1) 即服從標準正態分布的話,則有 \sigma X+\mu \sim N(\mu, \sigma^2) ,也就是說,有了標準正態分布,其他所有的正態分布的抽樣也都可以完成了。這下總算有點心滿意足了。不過別急,還有最后一個問題:多元高斯分布。一般最常 用不就是二元嗎?二元不是我們一開始就推出來了嗎?推出來了確實沒錯,不過我們考慮的是最簡單的情形,當然同樣可以通過 \sigma X+\mu 這樣的方式來處理每一個維度,不過高維的情形還有一個需要考慮的就是各個維度之間的相關性——我們之前處理的都是兩個維度相互獨立的情況。對于一般的多維正態分布 X\sim N(\mathbf{\mu}, \Sigma) ,如果各個維度之間是相互獨立的,就對應于協方差矩陣 \Sigma 是一個對角陣,但是如果 \Sigma 在非對角線的地方存在非零元素的話,就說明對應的兩個維度之間存在相關性。

這個問題還是比較好解決的,高斯分布有這樣的性質:類似于一維的情況,對于多維正態分布 X\sim N(\mathbf{\mu}, \Sigma),那么新的隨機變量 X_1=\mathbf{\mu}_1 + LX 將會滿足

\displaystyle X_1 \sim N(\mathbf{\mu}_1+L\mu, L\Sigma L^T)

所以,對于一個給定的高斯分布 N(\mathbf{\mu}, \Sigma) 來說,只要先生成一個對應維度的標準正態分布 X\sim N(0, I) ,然后令 X_1 = \mu+LX 即可,其中 L 是對 \Sigma 進行 Cholesky Decomposition 的結果,即 \Sigma = LL^T 。

結束之前讓我們來看看 matlab 畫個 3D 圖來改善一下心情:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

N = 50000; T1 = rand(1, N); T2 = rand(1, N); r = sqrt(-2*log(T2)); theta = 2*pi*T1; X =[r.*cos(theta); r.*sin(theta)]; mu = [1; 2]; Sigma = [5 2; 2 1]; L = chol(Sigma); X1 = repmat(mu,1, N) + L*X; nbin = 30; hist3(X1', [nbin nbin]); set(gcf, 'renderer', 'opengl'); set(get(gca,'child'), 'FaceColor', 'interp', 'CDataMode', 'auto'); [z c] = hist3(X1', [nbin nbin]); [x y] =meshgrid(c{1}, c{2}); figure; surfc(x,y,-z);

下面兩幅圖,哪幅好看一些(注意坐標比例不一樣,所以看不出形狀和旋轉了)?似乎都不太好看,不過感覺還是比前面的 heatmap 要好一點啦!

然后,到這里為止,我們算是把高斯分布弄清楚了,不過這只是給一個介紹性的東西,里面的數學推導也并不嚴格,而 Box Muller 也并不是最高效的高斯采樣的算法,不過,就算我們不打算再深入討論高斯采樣,采樣這個問題本身也還有許多不盡人意的地方,我們推導出來的結論可以說只能用 于一小部分簡單的分布,連高斯分布都要通過 trick 來解決,另一些本身連概率密度函數都寫不出來或者有各種奇怪數學特性的分布就更難處理了。所以本文的標題里也說了,這是上篇,如果什么時候有機會抽出時間 來寫下篇的話,我將會介紹一些更加通用和強大的方法,諸如 Rejection Sampling 、Gibbs Sampling 以及 Markov Chain Monte Carlo (MCMC) 等方法。如果你比較感興趣,可以先自行 Google 一下解饞! :D

文章名稱:python中leq函數 len函數python中文
網站URL:http://m.2m8n56k.cn/article2/doggeoc.html

成都網站建設公司_創新互聯,為您提供定制網站定制開發云服務器網站設計微信公眾號App開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都app開發公司
主站蜘蛛池模板: 国产精品久久久久久一区二区三区 | 国产日韩欧美自拍 | 欧美专区在线视频 | 美国一级毛片a | 欧美另类videosbestsex久久 | 成人在线黄色 | 玖玖香蕉视频 | 国内自拍视频在线看免费观看 | 国产精品国三级国产aⅴ | 欧美日一级片 | 国产孕妇孕交大片孕 | 亚洲成人福利网站 | 国内视频一区二区 | 亚洲欧美久久精品一区 | 欧美人成在线观看 | 一级一片在线播放在线观看 | 成人18视频在线观看 | 午夜毛片网站 | 亚洲欧美日韩国产 | 中国老太卖淫播放毛片 | 免费毛片视频网站 | 国产在线日韩在线 | 国产精品成人亚洲 | 国产最新网站 | 国产精品2020 | 久久狠狠一本精品综合网 | 久久久久久久99精品免费 | 模特三级在线观看 | 26uuu影院亚洲欧美综合 | 香蕉久久精品 | 精品乱人伦一区二区 | 国产亚洲精品国产第一 | 亚洲精品国产三级在线观看 | 香焦视频在线观看黄 | 九九国产视频 | 国产高清厕所盗摄视频 | 日韩在线第一区 | 日韩麻豆 | 日韩欧美国产视频 | 日韩三级中文 | 亚洲欧美日韩在线精品一区二区 |