DOT-00 Introduction

:bulb: 0. 目錄

:mega: 1. 聲明

  • DOT及其編寫之手冊皆屬VR&D財產。
  • 本文目的為讓初學者能快速認識DOT。文中所有引用及軟體截圖,業已經過VR&D授權使用。
  • 您可以在 VR&D官網 找到其相關產品及聯絡方式。。
  • :tada: 特別感謝VR&D President/COO Mr. Juan Pablo Leiva免費提供老駱DOT trial license作學習之用,並於過程中持續提供技術支援。

:earth_americas: 2. DOT介紹

Vrand_VisualDOC_Ch0_Introduction 中老駱提到VR&D旗下有兩條主要產品線,GENESISVisualDOC

其實兩個產品背後所呼叫的程式為以Fortran 77的最佳化運算子DOTBIGDOT。如果Design Variable數量在一兩千以下,可以呼叫DOT來計算,如果Design Variable數量在百萬級別以上,則比較適合呼叫BIGDOT,特別是Topology時。

以下是老駱與Mr. Juan Pablo Leiva討論時的部份內容。

DOT works well for problems with 100s variables, for 1000s still work but start to consume computer resources. BIGDOT was developed for problems like Topology were you need millions of design variablies.
Mr. Juan Pablo Leiva

:battery: 3. 利用Python呼叫DOT

基本上,DOT應該可以與各種程式語言串接。Prof Gerhard VenterGithub中開發了DOTWrapper,讓我們可以方便使用Python來呼叫DOT。此外,老駱將其略為修改為個人比較容易操作的格式,但參數定義皆相同。這邊須要注意的是,DOT其實有內建的JWRITE參數,可以將求解過程輸出至檔案中,但老駱覺得這樣設定比較麻煩。所以選擇於每次求解時直接儲存資訊。

以下說明利用Python呼叫DOT求解最佳化問題的4個步驟:

  1. 將想求解問題的Objective functionConstraint(s)定義於myEvaluate的函數中。
  2. 設定nDvar為待求解Design variable(s)數量,而nConsConstraint(s)數量。nDvarnCons須設為整數。
  3. 設定xDesign variable(s)的初始值,而xlxu為其上下限。xxlxu須設為Numpy array
  4. 定義DOT求解參數,並呼叫DOT進行求解。

DOT雖然有很多參數,但是一般使用下,使用者幾乎不須要調整這些參數,即可以得到不錯的結果。

通常使用者僅須調整MINMAXMETHODIPRINT3個參數,對應我們的Wrapper,即為nMinMaxnMethodnPrint

  • nMinMax為控制求解問題是最小化或是最大化的參數。
    • nMinMax-10,則設定此問題為最小化問題。
    • nMinMax1,則設定此問題為最大化問題。
  • nMethod則是控制求解問題演算法的參數。
    • 如果是有給定Constraint(s)的最佳化問題:
      • METHOD1,則呼叫the Modified Method of Feasible Directions(MMFD)
      • METHOD2,則呼叫Sequential Linear Programming method(SLP)
      • METHOD3,則呼叫Sequential Quadratic Programming method(SQP)
    • 如果是沒有給定Constraint(s)的最佳化問題:
      • METHOD01時,則呼叫BFGS algorithm
      • METHOD2時,則呼叫FletcherReeves algorithm
  • nPrint是控制求解過程輸出的參數。
    • 可以設定為0~7。數字越高代表越詳細的輸出,一般推薦將nPrint設為3

:mag_right: 4. DOT範例

這邊老駱使用自己修改的Wrapper說明DOT 5.X ManualSec4.2Box Design問題。

from dot import Dot import numpy as np import math def myEvaluate(x, obj, g, param): h, w, d = x[0], x[1], x[2] obj.value = 2.0 * (h * w + h * d + 2.0 * w * d) + 1.25 * h / 12.0 g[0] = 1.0 - h * w * d / 2. nDvar = 3 # Number of design variables nCons = 1 # Number of constraints # Set the initial values and upper and lower bounds for the design variables x = np.ones(nDvar, float) * 1.0 xl = np.ones(nDvar, float) * 0.001 xu = np.ones(nDvar, float) * 100.00 # Append different DOT instances into a list models = [] models.append(Dot(nMethod=1, nPrint=0)) models.append(Dot(nMethod=2, nPrint=0)) models.append(Dot(nMethod=3, nPrint=0)) for model in models: # model.print_init() model.fit(x=x, xl=xl, xu=xu, nCons=nCons, evalfunc=myEvaluate) model.print_info() for model in models: model.plot_fig(is_savefig=True)

依照先前提到的4個步驟定義問題:

  1. Line5~10 : 於myEvaluate中,將3Design Variables h,wd分別指定為x[0], x[1]x[2]。接著利用這些Design Variables來建構Onjective functionConstraint
  2. Line12~13 : 指定nDvar = 3(因為有3Design Variables),並指定nCons = 1(因為有1Constraint)。
  3. Line16~18 : 指定3Design Variables的初始值為1.0,下限為0.001,上限為100.00
  4. Line21~32 : 定義3個使用不同nMthod的模型。另外,nMinMaxdefault0,即最小化問題,不須設置。nPrint則設為常用的3。接著:
    • 呼叫fit方法串接DOT進行運算。
    • 呼叫print_info方法,將初始及最佳結果輸出於營幕上。此時,若搭配將nPrint設為0,則營幕上僅會輸出初始及最佳結果,適合Debug時使用。
    • 呼叫plot_fig方法,利用matplotlib繪製求解過程,並使用is_savefig=True將所匯圖檔存為*.png檔。

51_nMinMax_0_nMethod_1

61_nMinMax_0_nMethod_2

71_nMinMax_0_nMethod_3

將求解結果表列如下:

Parameter Initial value nMethod=1 nMethod=2 nMethod=3
H 1.00000E+00 1.93192E+00 1.94269E+00 2.13252E+00
W 1.00000E+00 1.01727E+00 1.00799E+00 9.68432E-01
D 1.00000E+00 1.01727E+00 1.02126E+00 9.68432E-01
Obj 8.10417E+00 1.22018E+01 1.22045E+01 1.22344E+01
Max G 5.00000E-01 3.81227E-04 7.35958E-01 -1.55971E-06
Function calls N/A 55 65 68

:flashlight: 其實此例題也可以利用VisualDOC進行求解,畢竟VisualDOC也是依靠DOTBIGDOT做為最佳化運算子。詳細設定請參考VisualDOC系列文

:computer: 5.本文使用之軟硬體

老駱使用GIGABYTEP15筆電作為本文的測試環境。

  • CPU : i7-6700HQ
  • Memory : DD3L 8G
  • OS : Windpws 10 Home
  • Python(Anoconda3) : version 3.7.3
  • NumPy : version 1.16.4
  • Matplotlib : version 3.1.0
  • VisualDOC : version 10.0
  • DOT : version 7.2

:mailbox: 6. 聯絡老駱

如果您或貴單位:

  • 有導入VR&D產品的意願,但是有報價、採購及發票等問題
  • 有教育訓練或顧問需求
  • 有些建言指教
  • 想交個朋友
    歡迎透過 :camel: camel@caeml.ai 聯絡老駱。