qpOASES 特殊QP型別的求解1(翻譯)

2021-09-07 23:56:17 字數 2964 閱讀 3197

編譯後帶有示例。

qpoases是乙個可結構開發的有效集qp求解器(structure-exploiting active-set qp solver)。 本文詳細介紹了如何選擇最有效的qpoases求解方案,來求解特定型別的qp。 為此,可以使用三個與qproblem類相似,且具有過載建構函式的類。

通常qpoases期望qp以下列標準形式出現:

x mi

n12x

thx+

xtg(

w0)s

.t.l

ba(w

0)≤a

x≤ub

a(w0

)lb(

w0)≤

x≤ub

(w0)

_^\ \ \ \ \ \fracx^hx+x^g(w_0)\\ s.t.\ \ lba(w_0)\leq ax\leq uba(w_0)\\ \ \ \ \ \ \ \ lb(w_0)\leq x\leq ub(w_0)

xmin​2

1​xt

hx+x

tg(w

0​)s

.t.l

ba(w

0​)≤

ax≤u

ba(w

0​)l

b(w0

​)≤x

≤ub(

w0​)

如果您的qp中使用(半)正定的hessian矩陣h

hh,您應該簡單地使用標準qproblem類。假如,你的qp符合以下要求,那麼他也可以有效的求解:

通過使用sqproblem類的建構函式和合適的init函式,建立sqproblem類的例項(而不是qproblem)。 兩者都採用與qproblem類完全相同的引數。

呼叫調整後的函式,從乙個qp過渡到下乙個qp。它還將新的hessian矩陣h_new以及新的約束矩陣a_new作為引數。

returnvalue hotstart

(const real_t*

const h_new,

const real_t*

const g_new,

const real_t*

const a_new,

const real_t*

const lb_new,

const real_t*

const ub_new,

const real_t*

const lba_new,

const real_t*

const uba_new,

int_t& nwsr,

real_t*

const cputime

);

可以在檔案/examples/example1a.cpp中找到使用sqproblem類的完整示例。

當二次規劃不包含約束但有界時,我們稱二次規劃「簡單有界(奇怪的翻譯,為什麼不是 僅僅有界)」,有如下形式:

x mi

n12x

thx+

xtg(

w0)s

.t.l

b(w0

)≤x≤

ub(w

0)

_^\ \ \ \ \ \fracx^hx+x^g(w_0)\\ s.t.\ \ \ \ \ \ lb(w_0)\leq x\leq ub(w_0)

xmin​2

1​xt

hx+x

tg(w

0​)s

.t.l

b(w0

​)≤x

≤ub(

w0​)

可以在求解演算法中利用這種特殊形式來加速計算,速度通常是標準形式的三到五倍。 因此,qpoases軟體包實現了特殊類qproblemb,用於解決簡單有界的qp。

為了利用此功能,請執行以下操作:

必須使用以下建構函式qproblemb(int_t nv)建立qproblemb物件;

之後,可以初始化qproblemb物件,同時通過呼叫函式解決第乙個簡單有界的qp,例如:

returnvalue init

(const real_t*

const h,

const real_t*

const g,

const real_t*

const lb,

const real_t*

const ub,

int_t& nwsr,

real_t*

const cputime

);

qproblem類的唯一區別在於指定約束的引數,即缺少albaubanc

returnvalue hotstart

(const real_t*

const g_new,

const real_t*

const lb_new,

const real_t*

const ub_new,

int_t& nwsr,

real_t*

const cputime

);

同樣,除了兩個引數lba_newuba_new之外,它與相應的qproblem成員函式具有完全相同的引數。

可以在檔案/examples/example1b.cpp中找到使用qproblemb類的完整示例。

特殊的OSPF區域型別

本文摘自 ccnp學習指南 bsci 區域的型別決定了它將收到什麼樣的路由資訊。使用末節區域旨在通告預設路由,這樣外部lsa和彙總lsa將不會擴散到該區域中。這將縮小該區域中路由器lsdb和路由選擇表的規模 末節區域 接收鏈路更新和彙總路由,不接受外部路由 主幹區域 將其他區域互聯起來,接收所有ls...

C string 特殊的引用型別

net 框架程式設計 修訂版 中有這樣一段描述 string型別直接繼承自object,這使得它成為乙個引用型別,也就是說執行緒上的堆疊上不會駐留有任何字串。譯註 注意這裡的 直接繼承 直接繼承自object的型別一定是引用型別,因為所有的值型別都繼承自system.valuetype。值得指出的是...

string是特殊的引用型別,特殊在何處

對於string這個引用型別是非常特殊乙個引用型別。它有兩點特殊的地方。第一點物件分配的特殊。例如 string str1 abcd string str2 abcd 那麼.net在分配string型別的時候,先檢視當前string型別列表是否有相同的,如果有的話,直接返回其的引用,否則重新分配。第...