網頁

2019年11月17日 星期日

MCTS 設計決策輔助

問題的定義
假設建築師必須做 n 個決策才能完成設計, 而每一個決策有 m個選項,因此所有可能決策的搜尋空間為 m 的 n 次方。一個成功的設計必須通過 x 個可以用程式定義並由電腦有效執行的設計品質檢測函數, 以及一個無法用電腦程式明確定義, 只能由建築師及業主取得主觀共識的檢測門檻。電腦的檢測需要等到所有決策項目都確定之後才能進行, 然而人為主觀檢測則不需要等候每一個決策都確定, 可以在部分決策時就進行檢測。每一設計方案在完成所有決策選項之後就可以極快速地由電腦判定x個可程式定義之檢測項目的得分, 然而人為主觀的檢測項目則需要繁複的溝通與會議才能判定是否通過。在此前提下, 如何運用MCTS提供建築師有效的資訊, 以協助其能更精準有效的完成一或多個成功的設計方案?

例如某建築物立面的帷幕牆共有256片帷幕單元需要設計, 而可供選擇的帷幕單元有兩種。因此 n= 256, m = 2, 共有 2的256次方種決策組合。每個帷幕牆的設計需要滿足 造價、節能與抗風三個可以由電腦程式判定之項目的檢測門檻, 還要能夠滿足建築師與業主對外觀美感的評價。此時MCTS的任務就是提供資訊協助建築師在這2的256次方種可能組合中尋找一個可以成功通過 k 個檢測函數門檻的設計。假設建築師每做一個決策需要 t 的時間, 因此完成一個設計需要 256 t 的時間。而電腦完成所有三項檢測的時間極短, 與256t 相較之下可以忽略不計。然而電腦需要等候所有的設計決策都確定之後才能進行有效的檢測。此外, 建築師與業主對外觀的評價需要繪圖與製作模型等輔助決策工作, 因此也是非常耗時, 假設以yt 的時間計算, y為一個不小的數字。 依此問題的設計, 電腦快速檢測的功能受限於建築師決策以及主觀評定所需的時間, 每檢驗一個設計決策需要 (256+y) t 的時間, 那麼要在 2的256次方可能設計方案中搜尋到極少數成功方案的的機會極其渺茫, 而電腦快速運算的功能絕大部分的時間都是閒置。

MCTS決策輔助:以一個長度為n的array D0代表完成一個設計所需要的所有設計決策。array中每一個item的值可以為 0, 代表建築師尚未針對該項進行決策,也可以是 i  (0 < i <= m),  代表建築師所選擇的設計選項。問題初始設定 array D0 的 每一個項目都是0。電腦隨即重複對n個設計選項進行隨機採樣之後進行m個項目的檢測, 記錄每一個項目每一次設計採樣通過的得分, 計算其平均值、通過機率與標準差, 並使用MCTS back propagation的回饋機制隨值更新。我建議電腦可以提供所有未決策項目每一個選項的期望得分、通過機率與標準差。

一旦建築師做了某些決策, 也就是為D0 的某些項目設定了非0的值, 電腦隨即針對所有未決策的項目進行隨機取樣, 並計算每一個未決策項目的每一個決策選項的成功機率、平均得分與標準差, 隨著採樣數目的增加隨時更新, 並等候建築師進行下一個決策。

以帷幕牆設計為例, 我建議開發第一個測試用程式如下:
int design[256]  = {0, 0, .....0};
void evaluateConstructionCost (int design[], double threshold, ref double score, ref bool pass){}
void evaluateStructure (int design[],
                                      double costDistribution[][],  // 每一個位置各類型帷幕版片之工程費用
                                      double threshold,  //設計目標門檻得分
                                      ref double score, //回傳該設計的得分
                                      ref bool pass){} //回傳該設計是否通過門檻

void evaluateStructure  (int design[],
                                      double windLoadDistribution[][],  // 每一個位置各類型帷幕版片之得分
                                      double threshold, //設計目標門檻得分
                                      ref double score, //回傳該設計的得分
                                      ref bool pass){}//回傳該設計是否通過門檻

void evaluateEnergy   (int design[],
                                      double RadiationDistribution[][],  // 每一個位置各類型帷幕版片之得分
                                      double threshold, //設計目標門檻得分
                                      ref double score, //回傳該設計的得分
                                      ref bool pass){}//回傳該設計是否通過門檻

2019年10月13日 星期日

Cost estimation of curtain wall in early design stages


This note discusses only the cost that can be localized within a limited context. Global attributes such as type diversity and configuration complexity that might add on  cost in fabrication and installation are not included.

Consider three components,  the locking devices, supporting frames and panels. 
  1. locking devices to the structure system
    Considering the entire facade as one piece, the locking devices that are required to firm the entire facade to the structure system are depend on the vertical loads caused by gravity and horizontal loads caused by wind pressure. For this, the cost estimation can be summarized as a function on the panel type and area of the curtain wall system. For each type of panel, consider its weight of unit area. However, this part of cost can be integrated to supporting frame and avoid double counting.
  2. supporting frame
    Supporting frame is most likely coincident with the panel vertices and edges.  Edge length would be an important factor linearly related to the cost for material, fixation, seaming, insulation and so on. Panels are supported by the frames and the weight and wind load would be important factors to design profiles for the supporting frame. Vertices would add on some cost for cutting, joining or  locking devices that would take materials, machining and time for fabrication. The panel area and type would also contribute to the cost of supporting frame due to the weight and wind load. The construction cost of each panel can be linearly proportional to the edge length of each panel.

    I would consider summarizing the construction cost as a weighted linear sum of
    numberOfVertices
    totalEdgeLength
    panelSurfaceArea
    panelType: which is attributed with estimated weighting factors for the above parameters, and weight per unit area for the panel.
    The calculation also needs reference to windLoadContourMap , which is supposed to be derived by some simulation or regulations.
  3. panel
    The panel type and surface area would be the most important factors. For each type of panels, the  cost of material, coating, paints, insulation, ... are proportional to area. Installation would takes one basic cost plus a part that is proportional to the weight and dimension. The dimension can be abbreviated with the sum of width and length for its bounding rectangle. Cost for fixation and seaming have been counted in the supporting frame and are ignored for panel. Wind load would add on some cost that is proportional to the surface area.

    I would consider summarizing the construction cost of each panel as a weighted linear sum of
    surfaceArea
    widthOfBoundingRectangle
    lengthOfBoundingRectangle
    panelType: , which is attributed with estimated weighting factors for the above parameters, and weight per unit area for the panel. The calculation also needs reference to windLoadcontourmap, which is supposed to be derived by some simulation or regulations.

Note for curtain wall

Facade curtain wall design

(for example: Given a 16 floor height building facade for curtain wall design. The structure frame has four 7.2m width spans with 3.6m for floor heights. )

A more general description for coding:

class Facade:
Mesh panelDissection
int[] panelTypes # -1 represent undecided
double[] panelInsulationLevel,
double[][] panelConstructionCostParameters
double[][] windLoadContourMap
double[][] solarRadiationContourMap)
DecisionTree dtree

def constructionCostEvaluation
def solarRadiationHeatGain

The architect needs to make decisions on the followings:

1. Dissections of the curtain wall
The choices for vertical dissections are one, two or three divisions for each span between columns. (just for example, can be any mesh though)
The choices for horizontal dissections are one, two or three divisions for each floor. (just for example, can be any mesh though)
The facade can be represented as a Mesh, with faces as panels on the curtain wall, edges as the supporting frame and vertices as the joints.

2. For each panel, the architect need to make choices among types of panels.
glazing with low E coating or regular
metal panel with high insulation or regular insulation

Evaluation

1. Construction cost evaluation: a function of panel geometry
double facadeConstructionCost( Mesh facade,
int[] panelType,
double[][] panelConstructionCostParameters
double[][] windLoadContourMap)

Construction cost of each panel depends on number of vertices, total edge length, surface area, and panel type.
For panels that need to withstand high wind pressure, extra cost proportional to the panel area is applied to the original cost.
A contour map on the estimated wind load is given. The wind load requirement for each panel is estimated with the surface integral of the wind load.

2. Energy consumption against solar radiation.
double facadeHeatGain( Mesh facade,
int[] panelType,
double[] panelInsulationLevel,
double[][] solarRadiationContourMap)

Total score is graded as the amount of heat gained directly or indirectly from solar radiation.
The insulation level of each type of panel is measured based on some experimental analysis.
Given a contour map that shows intensity distribution of solar radiation on the facade based on some simulations.
The head-gained of a panel is estimated as the product of its insulation level and the surface integral of solar radiation.
This is assuming the situation in the stage of conceptual design, when the architect has to decide the building mass with some concepts about the outlook. In most cases, building mass concerns site situations, urban code regulations and design objectives. The architect might come up with a few design alternatives for building mass, each of which would accommodate enough floor areas for required functional spaces and could be associated with some conceptual design schemes for the overall outlook of the building, probably illustrated with some sketches over the main facade or the entire building. The described setup starts at when the architect has decided the building mass and works on the elevations. When curtain wall has been chosen as one of the possible constructions for the part of the envelope, the architect might take her hands on decisions upon surface dissections and materials, for that would largely define how the building look like after constructed.
The architect may start to think about curtain wall dissections and materials with some knowledge regarding how building envelope may greatly affect the construction cost and energy consumption for the operation of the building. However, estimations on construction cost and energy consumption rely on surface material properties, distributions and quantities, which are unavailable until the design of building envelope system is completed.

MCTS
void mcts( List facades, 
List 
double[][] constructionCostParameters,
double[][] solarRadiationContourMap,
double[][] windLoadContourMap,
The objective is to find good facade designs that fulfill both construction cost and energy saving criteria. The search starts with a facade’s unfinished design as a mesh, with none or some panels assigned with panel types. The search process starts to do expansion, simulation and back propagation and continuously updates and shows the expected value of current partial design. The designer may run serval design alternatives at the same time. The designer may choose any of the design alternative to go on for more detail design, which is to assign some panels with some specific types. The process goes on until the designer finally choose types for every panels.

2019年5月3日 星期五

Monte Carlo Tree Search Assisted Design Decision Making

Monte Carlo Tree Search Assisted Design Decision Making

這個程式是為了模擬一個建築師進行設計時, 要在多個決策選項的搜尋空間中找到能夠被多個評估函數全部接受的決策組合。這些評估函數分為兩種, 有一種是能夠在所有決策都確定以後用電腦進行分析而得到結果的, 例如法規、結構、耗能與工程預算。另一組評估函數是需要專家判斷, 目前無法交由電腦執行, 例如美感、業主偏好、藝術價值等等評估。建築師的任務是要找到能夠通過所有評估項目的決策組合。以下描述兩組MCTS分別描述電腦與設計團隊的作業, 這個研究希望探討MCTS是不是可以提供有用的資訊協助建築設計團隊在設計過程中進行決策。

以下以建築立面的設計為例進行說明:假設建築物立面被分為 n 個區域, 每個區域必須選擇其外牆構造單元, 每個單元有 m 個選項, 因此整個決策空間是由 n 個  m 元選項所構成。每一個構造單元的選用會影響到外牆的結構、工程預算、耗能、採光、隔音等等, 假設目前都已經可以使用電腦運算進行評估, 前提是每一個決策必須都已經確定。建築師另外還需要考慮其他的條件, 必須人為判斷而無法使用電腦評估的, 例如客戶偏好、藝術價值…. 在此情境下, MCTS是否可以發揮其功能, 讓電腦評估的結果可以最大的協助建築師進行決策。建築師需要為n個選項全部決定

搜尋空間:MCTS的搜尋空間是一個16*16的Boolean array, 陣列內256個值給定一個搜尋決策排序之後就定義了一個二元的搜尋樹。搜尋結果必須通過n個檢測函數, 每個檢測函數都通過才算合格。

檢測函數:每一個檢測函數會使用一或多組16*16的Boolean array作為標的, 與受檢測的array逐一進行比對。 每一次比對計算受檢測array與標的array的相似度任一次的比對結果若超過門檻則檢測停止並回傳通過該函數的檢測。

MCTS的搜尋從選擇最優先的決策值開始, 進行expand, simulation之後進行檢測, 檢測結果就進行back propagate, 計算並更新每個決策值的成功率, 一直到被使用者終止為止。

使用者參考各個決策選項的成功率後決定採用某一個或多個決策, 設定其值, MCTS就繼續往下搜尋, 更新後繼未定之決策各選項的成功率。使用者的決策不一定依照所給定的搜尋順序。

以上是第一個執行模式。第二個執行模式則加入第二組MCTS來模擬使用者的決策。第二組所依據的搜尋決策排序未必與第一組相同, 且所使用的評估函數也不相同。第二組進行MCTS, 更新其決策選項之成功率後選定某些決策並設定其值後, 交給第一組MCTS繼續進行程序, 兩組MCTS可以同步進行。第二組在選定決策項目時可以參考第一組MCTS的決策選項成功率, 優先選擇兩組MCTS模擬結果成功率都比較高的選項作為決策, 此部分的決定方式需進一步討論, 初步可以將兩組的成功率乘上權重相加作為選擇依據。

檢測的函數可以選用圖片, sample成16*16矩陣。做法是拿許多張圖片, 定一個16*16的方格, 每一個方格中隨機取一點求rgb的平均, 大或等於128就算白, 小於128就算黑

MCTS其實就是統計取樣, 這個例子中建築師需要做256個二元決策, 如果等到所有的決策都做了才能進行評估, 那一輩子也找不到好設計。MCTS 可以幫建築師用隨機取樣的方式填補其尚未做的決策, 檢測後統計成功率, 告訴建築師目前的決策預期的成功率有多大, 有沒有其他決策選項會有更高的成功率。 254個決策的決策空間如果過於龐大無法在有效時間內運算, 可以縮小。其搜尋困難度可以藉由評估函數的通過率來調整。

實際進行時, 人所組成的設計團隊和電腦同步作業。人在做決策的期間, 電腦24小時不間斷就還未決定的決策進行取樣, 評估後更新決策樹之節點的成功率, 提供給設計者參考。人所構成的設計團隊可能需要幾天的時間, 或許還要開會討論, 在目前階段未定的決策中, 選擇一部份進行決策, 再交給電腦繼續做MCTS

如此來回進行幾個回合之後, 設計團隊確認所有的決策選項, 如果最後的結果可以符合所有的檢測項目就算成功。如果這部分可行, 可以繼續加入優化的功能。就是在所有的評估函數中選擇一個做為優化的目標函數, 原先通不通過的輸出改為得分, 決策樹節點的成功率就變成目標函數的期望值, 設計團隊就可以選擇較高期望值的節點繼續探索更好的設計方案

人和電腦合作的設計流程好像是沒有對手的alphago, 人一步一步把設計做完, 過程中參考電腦提供的各個走法的成功率來做下一步的決策, 與alphago的差別是電腦並不能掌握全部的評估函數, 有一部份是在人的腦中無法用程式處理的。因此我們在電腦模擬時就用兩組檢測函數, 第二組代表人腦冥冥之中的黑箱檢測。最後如果能夠找到設計方案完全符合兩組的檢測函數, 就算勝利。

選擇MCTS的主要原因之一是夠robust, 我們不需要了解搜尋的檢測函數的特性, 有任何需要的評估函數隨時都可以加入搜尋的條件, 也可以隨時撤離不需要的函數。我們也不需要在意搜尋空間太大, 基本上比圍棋小的空間都可以處理, 因此不需要分析搜尋空間的結構以縮小搜尋樹。這兩個特徵都符合設計問題的處理, 也是過去各種方法所遭遇的困境。

2019年4月29日 星期一

筆記:以MCTS協助設計決策

結合MCTS的流程就是每一個設計階段由電腦進行MCTS, 提供資訊給外牆系統設計師與整個團隊, 包括建築師, 業主, 各技術顧問做參考, 由他們執行下一階段的selection動作, 做部分的決策, 例如選定某些區域, 確定設計的系統。 電腦24小時不間斷作業一直更新隨機採樣帶來的訊息, 設計團隊做了Selection後, 繼續往下發展, 也替設計團隊所做的決策進行可行性評估, 告訴設計團隊這樣的決策將來的成功率, 也就是同時滿足所有電腦可以進行評估的項目的成功機率

電腦的評估我們就用抽象化的作法, 假設每一個項目的評估, 在冥冥之中有一個, 或多個最佳決策, 可以得滿分。每一個決策用一張有256格子的圖面表示, 黑白兩色。圖片隨便找, 有複雜的, 有簡單的。

遊戲一開始, 256個格子全部是灰色, 代表還沒做決策, 電腦開始做MCTS, 可以先隨機selection, 選擇從某個方格開始。設計團隊也可以先選定一個或多個方格做決策, 把灰色改成黑或白, 電腦就從這開始進行expand, simulate 和 backpropagation

電腦評估的方式就是在對未決定的方格隨機採樣之後比對先前為每一項評估的項目準備的圖片, 如果黑白一致的就得分, 看256格共可得幾分, 是否通過預設門檻, 假設是80分, 通過所有門檻表示成功, 計算成功機率後backpropagation

如果一個項目有多張圖片, 那麼就比對所有的圖片, 只要有一張圖片通過門檻, 該項目就通過門檻

另外電腦無法決定, 必須由設計團隊決策的部分其實也可以用同樣的方法, 也是MCTS來模擬, 也就是用另外一組圖片來做評估, 選出該組決策成功率最高的決策選項, 來讓電腦組的MCTS估計電腦組的成功率, 電腦組與設計組交替進行, 去模擬設計團隊與電腦如何協同作業

最後, 如果能夠成功找到某些設計方案能夠通過所有的評估項目, 那就算成功了, 先不用管最佳化好了, 反正, 如果通過的方案不難找到, 我們可以提高部分項目的門檻, 這樣也可以找到越來越好的方案

這個程式這樣已經很清楚了, 可以開始寫, 我問問看有沒有人可以幫忙, 你了解整個想法後可以開始寫論文, 看要如何說明

2的256次方, 這個問題空間也夠大讓MCTS去發揮的了

搜尋空間大約相當於一個16*16的圍棋棋盤, 每個格子必須決定是下黑子還是白子

如果MCTS可以幫助電腦下贏柯潔, 那應該也可以幫設計團隊找到勝算最大的下法

與圍棋不同的是圍棋完全可以用規則決定勝負, 所以電腦可以跟電腦下, 而設計的勝負有一部份是人來決定的, 所以電腦無法取代人, 但可以取代另一部份, 就是電腦可能做得比人更好的, 另一個差異就是博奕是雙方對抗, 你贏我輸, 而設計遊戲是追求雙贏, 也就是電腦評估和人的評估必須都通過才算贏, 但這個差異完全不影響運算, 因為我們只要把電腦方輸贏的定義反過來就好了

模擬設計團隊的那個部分做了backpropagation之後選擇下個階段成功率比較高的決策中, 電腦模擬成功率也高的決策作為selection。我們可以使用pareto set的方法來挑選幾組設計方案分別往下發展, 一開始選擇比較多組, 到設計階段的越後期方案越少, 最後只留一組

我們把問題再放大好了, 用16*16的方格, 這樣是正方形, 好處理, 評估函數就找許多張照片, 通通轉成16*16的黑白陣列

Sg:
你用任何兩張照片都可以, 程式中的image sampler點兩下選擇照片

Sg:
我們可以不必真正去做潔能分析或預算分析, 因為任何的evaluation就是取得一組輸入參數 (在這個例子中就是256個0 或 1的決策), 然後輸出通過或者不通過

Sg:
中間運算過程可能非常複雜, 可能非常簡單, 但是這個評估函數就是把輸入的資料對應到0 或 1, 代表通過與否

Sg:
就象徵意義上而言, 如果這個評估函數很複雜, 代表背後的圖形很難猜測, 而且可能錯一小部分就全錯。要模擬這種評估項目, 我們只要提高門檻值, 例如256需要答對255以上, 錯兩題就不通過。但這樣成功率太低, 很可能根本找不答案, 為了提高成功率, 可以用很多張圖片, 各不相關, 每張的門檻都很高, 例如我們總共有一萬張這種圖片, 只要任何一張通過, 就算通過。

Sg:
有些評估很簡單, 例如假設造價只與選材料有關的話, 那麼最佳的決策就是全部採用最低價的材料, 那就用一張全黑的圖片, 全部都是0, 然後設一個門檻, 例如 128, 因此, 如果設計者採用一半以上的低價材料, 那麼這個評估就會過關

Sg:
必須由設計團隊決定的評估項目也一樣。每一個決策成員心中可能有一把尺, 在團隊成員討論過程中可能也各有影響力, 反正到底甚麼方案才會被接受沒有人知道, 但上帝知道, 我們就扮演上帝, 挑選一些圖片代表上帝。

Sg:
[圖片]

Sg:
設計的問題和圍棋比起來還有一項差異, 就是設計方案的評估比圍棋的勝負複雜很多, 因此程式在進行MCTS過程中會花大量的時間在評估造價、耗能、結構等分析或模擬上, 要在短時間進行大量的採樣會很困難

Sg:
但電腦的好處就是不用休息, 設計團隊進行人為決策可能需要時間, 可能還需要開會討論, 這個週期可能好幾天, 而這段時間電腦根據前期的決策24小時不間斷的進行MCTS給設計團隊做決策參考


木:
我的理解是不是將評估的問題簡化成對生成圖片判斷的0,1問題?

Sg:
不能說是簡化, 因為所產生的函數可能更複雜。整個研究的重點並不在能源評估或預算 (我想, 這可能是我們之前的盲點, 把重點放在預算上, 因此會被以專業的角度來評審), 而是提供一個方法讓電腦的分析與模擬能夠真正幫大忙

Sg:
對預算的幫助是這樣, 因為如果設計做完了, 每一部分的設計都確定, 材料數量都明確, 工程造價就可以評估了, 但設計初期是無法做這種評估的, 所以很可能在設計過程中對預算就失控了, 不只是預算, 對節能或物理環境品質也是這樣

Sg:
很可能最後碰到預算問題, 就只好做各種可能的調整, 把原先設計的品質都失去了

Sg:
MCTS對Alphago的最大意義就是不必尋求在中盤, 甚至布局階段就評估勝負的辦法, 因為那是不可能做到的。但是圍棋如果下完每一子, 最後的勝負卻很容易評估。建築設計某些方面也是如此, 基本設計方案很難評估耗能, 但等細部設計都做完了, 每一片玻璃的參數都確定, 那麼耗能就可以評估了。

Sg:
在研究方法上, 我們等於提出一個架構, 在這個架構下設計師可以採用任何的電腦分析模擬軟體來做評估, equest, ecotect, 或任何其他軟體都行, 反正每一個軟體就像一個函數, 給她輸入的參數, 她就會告訴妳合格或不合格。因此, 我們可以給予任何函數 (在我們的例子當中, 就用圖案比對來當作這些函數), 完全無損其 generality

Sg:
關於用圖片作為模擬分析評估的函數, 我認為完全具有正當性, 因為任何一個評估軟體, 針對一個有256個二選一決策的設計方案, 一定有一些決策的組合是最理想的, 這些理想的決策組合就可以用一張張的圖片來表示。因此, 用圖片評估根用真正的分析程式去評估是等價的, 關鍵是圖片的數量和內容, 只要找到正確的圖片, 用足夠的數量, 那麼兩個程式可以有相同的輸入和輸出, 那麼兩個程式就沒甚麼差別了

Monte Carlo Tree Search Assisted Multi-criteria Design Decision Making


11:24 sgs 每一個檢測函數基本上就是一個 Boolean function, 其input是一個256位元的矩陣, output就是0或1, 代表檢測通過或不通過。我們先不急著用真實的建築性能評估函數, 而是用一個16*16的目標矩陣來模擬各種可能的評估。我建議就比對input的矩陣與目標矩陣, 就其正確率設一個門檻, 高於門檻就通過, 低於門檻就不通過

11:38 sgs 舉個例, 我們設計一個帷幕牆, 總共有16*16個窗格。設計師必須為每一個窗格選用A材料或者B材料。A材料每扇1元, B材料每扇2元。假設建築預算是300元, 那麼模擬的評估函數就可以利用一個全部為A的矩陣來和輸入矩陣比對。函數的輸入矩陣為設計師所決定(或者monte carlo隨機取樣)各個窗格的選擇材料A或B, 比對之後如果正確率超過212/256, (212+(256-212)*2 = 300)就代表預算不會超過300, 因此可以通過檢測。如果檢測函數更複雜, 那麼可以用多個目標矩陣, 用and 或 or 連結起來進行模擬。這件事很難對學建築的人說明, 他們可能無法接受自己學了這麼久的專業, 居然可以用影像比對來模擬。但學數學的人應該就知道是可行的。

11:44 sgs 因為搜尋空間是有限的, 因此, 在最極端的情況也可以用窮舉法來模擬。

11:46 sgs 因此, 我們在理論測試階段就隨便找一堆圖片, 轉換成16*16的二元矩陣用來定一評估函數, 在MCTS搜尋過程中用來計算設計方案是否達到預期的品質