天天看點

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

目錄

  • 0 PEST++系列文章
  • 1 第一位朋友 ZJ
  • 2 第二位朋友 LGH
  • 3 第三位朋友 XY

0 PEST++系列文章

【PEST++】01 參數優化與靈敏度分析

【PEST++】02 新安江模型參數自動率定

【PEST++】03 水文模型不确定性和靈敏度分析

【PEST++】04 使用者手冊筆記

本文記錄了三位朋友使用PEST++時,我與他們的交流過程,在這裡一并附上。希望對學習PEST++的讀者有幫助。在此感謝三位朋友的授權。

1 第一位朋友 ZJ

Q:在

tsproc.dat

檔案中,導入觀測值和實測值序列時,觀測值的時間範圍要小于等于實測值的時間範圍是吧?

A:是的。這樣才能将觀測值内插到實測值相同序列上,便于精度比較和統計。

tsproc.dat

檔案是用來處理模型輸出結果為時間序列的情況而編寫的,比如模型輸出結果為流量過程、水位過程等。并且可以自動生成PEST++自動率定所必需的控制檔案

.pst

。如果模型輸出結果僅為若幹數值,而不構成時間序列,則不需要編寫

tsproc.dat

檔案,可直接按照PEST++要求手動編寫控制檔案

.pst

Q:怎麼運作率定程式?指令是輸入什麼?

A:

pestpp.exe

tsproc.exe

都是在指令行(Command Line)裡運作的,不能用滑鼠輕按兩下運作。配置好率定所需檔案後,在模型程式所在檔案夾内打開指令行工具(按住

shift

鍵,滑鼠右鍵選擇

powershell

),運作時間序列處理程式的指令是

.\tsproc.exe tsproc.dat tsproc.rec
           

運作自動率定程式的指令是

.\pestpp model.pst
           

建議把指令寫在批處理腳本

.bat

中,比如示例中給出的

自動率定.bat

,這樣就不用每次運作都輸入指令。

Q:從哪裡檢視率定結果?

A:

.par

檔案檢視率定結果,記事本打開,第一列就是率定值了,後面不用看。

.sen

檔案檢視靈敏度。圖示該列值的大小表示靈敏度,數值越大越靈敏,表示這個參數對目标的影響大。

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

Q:這倆腳本,

batch.bat

為什麼沒有

pestpp model .pst

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:

batch.bat

的是在程式運作中反複執行的,本身就是用

pestpp.exe

調用的,是以不能再寫

pestpp model.pst

了。直接用

運作.bat

運作不會報錯,可以先用控制台調試好,沒錯誤再用

運作.bat

。主要就是省得每次粘貼。

Q:這個地方表示的什麼意思?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:這表示這一次率定還要再跑44次。

Q:如果自動率定出來的結果,帶回原模型,效果不好,那應該怎麼改進呢?再率定一次嗎?

A:在率定的時候,實測值與模拟值對比不能取整個計算時段,需要提出預熱部分。如果結果還是不好,嘗試在

group.txt

中把倍率調小,在

parma.txt

中參數範圍調大。如果仍然率定效果不理想,那就是模型本身的問題。

2 第二位朋友 LGH

Q:這個模闆檔案問題出在哪裡?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:第一行的ptf與#之間需要有半角(英文)空格

Q:這裡的問題是說#dk有問題嗎?是後面的空格不能加這麼大嗎?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY
【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:根據錯誤提示,

dk

後面你輸入的是

Tab

鍵,而不是空格。這樣一來,pestpp會把

dk

和後面的

Tab

一起識别為變量,而不是單純的

dk

這個參數。是以你應該把

dk

後面的

Tab

鍵替換成半角空格。這個問題在用Excel處理資料後粘貼到模闆檔案

.tpl

中經常出現,希望讀者注意。

Q:參數檔案

param.txt

這麼寫是哪裡有問題嗎?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:bp的#去掉,另外在

group.txt

中添加四組,就是

gp1

gp2

gp3

gp4

,像

gp1

一樣。

Q:group我之前也添加了,是這裡寫錯了嗎?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:是的,你後面的四個還是用0.1或者0.01好了,這裡的0.01指的是倍數,就是每次運作程式增加或減少參數初始值的0.01倍。

Q:程式運作結束後,輸出了這麼多檔案,那結果在哪個檔案裡?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:在

model.par

裡面,

model.rec

記錄了模拟與實測內插補點。

.par1

.par2

.par3

這種是指率定過程中每次運作程式得到的最優參數,最終的最優參數在

.par

檔案中,檔案名不一定是

model

,但字尾一定是

.par

Q:率定參數的結果是這一列吧?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:是的。

Q:和給的初始值一樣,算是率定失敗了嗎?

A:你的每個斷面給個槽率的率定方法,很難得出結果,因為槽率變化對結果影響不大,建議你分段設定槽率。

Q:水動力模型模拟出來的結果有預熱的部分,放到輸入檔案裡,需要把它們删掉嗎?

A:最好不要把預熱部分作為率定部分。

Q:運作模型輸出的資料,是怎麼識别哪些是要拿來和實測值對比的呢?

A:這個問題中,實測值檔案放在

observationstage.ssf

裡面,為了把模型輸出檔案

stage.ssf

與實測值檔案

observationstage.ssf

比對起來,需要在

tsproc.dat

檔案寫明從這兩個檔案取數對比。

Q:運作程式之後,會報錯,這裡是說我的輸入檔案有問題嗎?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:路徑名不要有中文、空格等特殊字元,文本檔案格式都改為ANSI格式。

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

Q:我之前是隻監測了一個斷面的水位,如果我需要再把一個斷面的流量加入對比,需要修改什麼?是要在

tsproc.dat

裡加上什麼嗎?

A:那你要把那個斷面的流量也輸出來,然後再寫個流量的實測值檔案,最後在

tsproc.dat

檔案中導入模型輸出流量值。

Q:這裡的問題對應的是右邊這部分的嗎?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY
【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:不是,右邊是内插的。可能是你的計算時間步長取短了,記憶體不夠用。或者是實測值時間步長取短了。

Q:

model.rec

裡面的一些内容不清楚啥意思?比如這裡

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:這個檔案是PESTPP整個率定的記錄,這些參數是在.pst檔案中設定的,.pst檔案是pestpp運作必需的控制檔案,由tsproc.exe運作tsproc.dat自動生成。你可以打開.pst檔案檢視這些參數。至于參數的實體意義,就需要看pestpp的手冊了,一般預設即可。

Q:這裡是看最優結果的平均誤差的吧?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:這個記錄了實測值與模拟值的對比,是重要的結果,可以直接導入到excel中畫圖,直覺比較率定效果。

3 第三位朋友 XY

Q:新安江參數檔案是按照這個來弄嗎?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:我在部落格裡面寫的是示例,實際不用這樣弄的。一般類型選擇

none

就可以了。

Q:bat都是你自己寫的嗎?

A:是自己寫的,就三條語句。

Q:那個參數率定用4年,驗證用2年的,為啥?比如為啥不是5年率定、1年驗證這種,或者3+3?

A:這是我自己定的,你可以選擇别的組合方式。

Q:

flow.ssf

是啥流量檔案?

A:

.ssf

字尾是PESTPP要求的資料格式,可以用記事本打開。這是模型模拟出流的資料。

Q:我安裝的PEST好像沒看到你的包裡面的這兩個檔案,

pestpp.exe

tsproc.exe

?

A:我用的是PEST++,是PEST的更新版,使用起來比PEST簡單友善的多,隻有一個免安裝自動率定程式

pestpp.exe

和一個時間序列處理程式

tsproc.exe

Q:tsproc這個是把模拟值內插補點成比對實測值的工具?

A:是的,就是比對時間的。同時,它還可以自動生成pestpp所需的控制檔案,字尾名為

.pst

Q:這三個批處理檔案,

batch.bat

是參數估計用的是吧?batch.bat應該是反演用的吧?給率定定方向用的是嗎?或者或降維用的?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:

batch.bat

是程式自動調用的,不用人去點。

batch.bat

其實就是每次率定pestpp自動調用

xaj.exe

,起這個作用。

Q:這個不是

all

嗎?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:不是all,就是test,是用來驗證的。

Q:寫出test.txt的用處是啥?com_test檔案是幹啥用的?

A:test.txt就是來驗證的,和xaj.out是一類檔案。屬于給pestpp識别用的,你可以記事本打開看看。com_test是寫入各偏差統計值的

Q:record.txt呢,這個是要配置的嗎?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:record.txt是pestpp自動輸出運作記錄的,不需要手動配置。

Q:是在dos視窗這樣運作嗎?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:不用DOS,直接點

自動率定.bat

就可以開始率定了。

Q:我這樣分開到檔案夾也可以嗎?不需要配置環境和路徑嗎?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:不行,不能分開,都要在一個檔案夾裡,路徑不用配置。

Q:為啥你文章講需要一個小時,我幾分鐘就運作完了?

A:運作時間的問題,可能是你的電腦沒安裝

matlab

,無法運作

xaj.exe

,我的新安江模型是用

matlab

寫的。

Q:PEST++是隻有一個獨立的

pestpp.exe

嗎?PEST怎麼有這麼多?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:對,是的,隻有一個

pestpp.exe

,别的什麼都沒有,不需要安裝,隻要把它放在檔案夾裡直接就能用,不需要開控制台,直接點 自動率定.bat 就能自動率定了。

pest

的文檔我沒看,這些好像是把許多功能分開成多個exe了。

Q:那你的那個

tsproc.exe

哪來的?pest套裝軟體包裡面好像也沒有這個?

A:這是是USGS開發的,專門用來處理時間的,這是tsproc的文檔。

Q:pest命名找不到規律,一會兒++ 一會兒PP?

A:pestpp = pest plus plus = pest ++ = PEST++,這其實是一樣的。

Q:這幾個選取有點不明白了,依據是什麼?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:參數選取我在部落格中已經說明了,建議仔細看看。上面是我用來示例的,有需要的時候再這麼做,一般就不操作就行,就是使用

none

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

Q:%代表是解釋嗎?後面解釋參數的内容是中文還是英文?應該是和模型裡面保持一緻吧?

A:%不是解釋,後面是什麼字都無所謂的,隻要在模闆檔案裡标好對應位置就行。

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

Q:xaj的out檔案是文本檔案?

flow.ssf

檔案怎麼來的?

【PEST++】05 Q&A常見問題釋疑0 PEST++系列文章1 第一位朋友 ZJ2 第二位朋友 LGH3 第三位朋友 XY

A:

xaj.out

是把模型輸出檔案

flow.ssf

按照與實測值

obseravedflow.ssf

時間序列比對而成的,是文本檔案。

flow.ssf

就是模型輸出檔案,三列分别為 辨別符、 時間和流量值。這個格式是我在

xaj.exe

中修改的,因為

pestpp

需要這種格式來識别資料。

pestpp

給了幾種通用格式,這在pestpp 4.2.1手冊中有。這個文檔的27頁介紹了一些tsproc能處理的資料檔案類型,可以看看有沒有,比如這個是和 HSPF 還有 Modflow 等其他别的模型,沒有的話就得自己寫個腳本轉換成 SSF格式了。pestpp雖然不需要程式設計,但是對輸出檔案格式要求高,這也是pestpp比較麻煩的地方。如果能從模型源碼裡直接修改輸出格式,那就會快還多,相對于輸出檔案後再轉換來說,效率高不少。

Q:還有這個ssf檔案是xaj的輸出檔案格式吧?不是pest的檔案格式要求嘛?

A:SSF是PESTPP的要求,我修改了xaj的源程式,使他直接輸出這種格式,來滿足PESTPP的需求。

Q:這個在CONTEXT具體啥作用?是不是xaj模型裡面的字元名?

A:CONTEXT作用就是指定哪些子產品可讀,在

tsproc.dat

檔案開頭就有CONTEXT關鍵字,後面的子產品與關鍵字一緻的就執行。在運作tsproc.exe時,也可以指定關鍵字,用以覆寫檔案中的關鍵字。關鍵字的使用是為了将多個子產品寫進一個

tsproc.dat

中,便于編輯。

Q:這個怎麼運作一下,就彈出模型的軟體視窗?

A:因為這個需要多次運作模型,實際上就是自動改輸入參數,然後多次運作模型,再自動比較,pestpp率定就是幹這個事的。這個率定其實不需要圖形使用者界面的exe,最好就是那種黑屏控制台的模型exe。