Doptimize.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. <template>
  2. <div class="XFpdding">
  3. <div class="numberinput lefttext dlheight">
  4. <el-form-item label="优化算法:" :label-width="formLabelWidth200">
  5. <el-select v-model="youhua.algorithm" :suffix-icon="CaretBottom" placeholder="请选择">
  6. <el-option v-for="item in yslist" :key="item.value" :label="item.label" :value="item.value">
  7. </el-option>
  8. </el-select>
  9. </el-form-item>
  10. <el-form-item label="续算开关:" :label-width="formLabelWidth200">
  11. <el-select v-model="youhua.irestart" :suffix-icon="CaretBottom" placeholder="请选择">
  12. <el-option v-for="item in cswitch" :key="item.value" :label="item.label" :value="item.value">
  13. </el-option>
  14. </el-select>
  15. </el-form-item>
  16. <el-form-item label="试验设计方法:" :label-width="formLabelWidth200">
  17. <!-- <el-input v-model="youhua.ndoe" :step="100" :min="0" :max="1000" controls-position="right" /> -->
  18. <el-select v-model="youhua.ndoe" :suffix-icon="CaretBottom" placeholder="请选择">
  19. <el-option v-for="item in tdlist" :key="item.value" :label="item.label" :value="item.value">
  20. </el-option>
  21. </el-select>
  22. </el-form-item>
  23. <el-form-item label="选择代理模型:" :label-width="formLabelWidth200">
  24. <el-select v-model="youhua.surromod" :suffix-icon="CaretBottom" placeholder="请选择" @change="handlesurromodChange">
  25. <el-option v-for="item in daililist" :key="item.value" :label="item.label" :value="item.value">
  26. </el-option>
  27. </el-select>
  28. </el-form-item>
  29. <el-form-item label="样本点数:" :label-width="formLabelWidth200">
  30. <div style="display: flex;">
  31. <el-input type="text" style="margin-right: 10px;" v-model="youhua.ns">
  32. <!-- <template #prepend>X方向</template> -->
  33. <template #prefix><span style="margin-right: 8px;">初始</span></template>
  34. </el-input>
  35. <el-input type="text" style="margin-right: 10px;" v-model="youhua.nsmax">
  36. <template #prefix><span style="margin-right: 8px;">最大</span></template>
  37. </el-input>
  38. </div>
  39. </el-form-item>
  40. <el-form-item label="优化进程数:" :label-width="formLabelWidth200">
  41. <el-input v-model="youhua.proscount" :step="100" :min="0" :max="1000" controls-position="right" />
  42. </el-form-item>
  43. <!-- <el-form-item label="屏幕输出等级:" :label-width="formLabelWidth200">
  44. <el-input v-model="youhua.iout" :step="100" :min="0" :max="1000" controls-position="right" />
  45. </el-form-item> -->
  46. <!-- <el-form-item label="低可信度样本点数:" :label-width="formLabelWidth200">
  47. <div style="display: flex;">
  48. <el-input type="text" style="margin-right: 10px;" v-model="youhua.nslf">
  49. <template #prefix>初始 </template>
  50. </el-input>
  51. <el-input type="text" style="margin-right: 10px;" v-model="youhua.nsmaxlf">
  52. <template #prefix>最大</template>
  53. </el-input>
  54. </div>
  55. </el-form-item>
  56. <el-form-item label="各可信度样本点数:" :label-width="formLabelWidth200">
  57. <div style="display: flex;">
  58. <el-input type="text" style="margin-right: 10px;" v-model="youhua.nsmk">
  59. <template #prefix>初始 </template>
  60. </el-input>
  61. <el-input type="text" style="margin-right: 10px;" v-model="youhua.nsmaxmk">
  62. <template #prefix>最大</template>
  63. </el-input>
  64. </div>
  65. </el-form-item> -->
  66. <el-form-item label="最优解收敛性容差:" :label-width="formLabelWidth200">
  67. <el-input v-model="youhua.xtol" :step="100" :min="0" :max="1000" controls-position="right" />
  68. </el-form-item>
  69. <el-form-item label="真实函数约束容差:" :label-width="formLabelWidth200">
  70. <el-input v-model="youhua.feasibilitytolreal" :step="100" :min="0" :max="1000" controls-position="right" />
  71. </el-form-item>
  72. <el-form-item label="代理模型约束容差:" :label-width="formLabelWidth200">
  73. <el-input v-model="youhua.feasibilitytolsurro" :step="100" :min="0" :max="1000" controls-position="right" />
  74. </el-form-item>
  75. <el-form-item label="相关函数:" :label-width="formLabelWidth200">
  76. <el-select v-model="youhua.corr" :suffix-icon="CaretBottom" placeholder="请选择">
  77. <el-option v-for="item in daililist1" :key="item.value" :label="item.label" :value="item.value">
  78. </el-option>
  79. </el-select>
  80. </el-form-item>
  81. <el-form-item label="是否优化超参数:" :label-width="formLabelWidth200">
  82. <el-select v-model="youhua.consttheta" :suffix-icon="CaretBottom" placeholder="请选择">
  83. <el-option v-for="item in daililist2" :key="item.value" :label="item.label" :value="item.value">
  84. </el-option>
  85. </el-select>
  86. </el-form-item>
  87. <el-form-item label="Kriging模型阶数:" :label-width="formLabelWidth200">
  88. <el-select v-model="youhua.porder" :suffix-icon="CaretBottom" placeholder="请选择">
  89. <el-option v-for="item in daililist3" :key="item.value" :label="item.label" :value="item.value">
  90. </el-option>
  91. </el-select>
  92. </el-form-item>
  93. <el-form-item label="相关矩阵分解法:" :label-width="formLabelWidth200">
  94. <el-select v-model="youhua.dcmp" :suffix-icon="CaretBottom" placeholder="请选择">
  95. <el-option v-for="item in daililist4" :key="item.value" :label="item.label" :value="item.value">
  96. </el-option>
  97. </el-select>
  98. </el-form-item>
  99. <el-form-item label="超参数优化算法:" :label-width="formLabelWidth200">
  100. <el-select v-model="youhua.paraopt" :suffix-icon="CaretBottom" placeholder="请选择">
  101. <el-option v-for="item in daililist5" :key="item.value" :label="item.label" :value="item.value">
  102. </el-option>
  103. </el-select>
  104. </el-form-item>
  105. <el-form-item label="正则化方法:" :label-width="formLabelWidth200">
  106. <el-select v-model="youhua.regular" :suffix-icon="CaretBottom" placeholder="请选择">
  107. <el-option v-for="item in daililist6" :key="item.value" :label="item.label" :value="item.value">
  108. </el-option>
  109. </el-select>
  110. </el-form-item>
  111. <el-form-item label="加点准则:" :label-width="formLabelWidth200">
  112. <!-- <el-input v-model="youhua.infill" :step="100" :min="0" :max="1000" controls-position="right" /> -->
  113. <el-select v-model="youhua.infill" :suffix-icon="CaretBottom" placeholder="请选择">
  114. <el-option v-for="item in daililist7" :key="item.value" :label="item.label" :value="item.value">
  115. </el-option>
  116. </el-select>
  117. </el-form-item>
  118. <el-form-item label="KB加点数量:" :label-width="formLabelWidth200">
  119. <el-input v-model="youhua.nparallel" :step="100" :min="0" :max="1000" controls-position="right" />
  120. </el-form-item>
  121. <el-form-item label="子优化方法:" :label-width="formLabelWidth200">
  122. <!-- <el-input v-model="youhua.iopt" :step="100" :min="0" :max="1000" controls-position="right" /> -->
  123. <el-select v-model="youhua.iopt" :suffix-icon="CaretBottom" placeholder="请选择">
  124. <el-option v-for="item in daililist8" :key="item.value" :label="item.label" :value="item.value">
  125. </el-option>
  126. </el-select>
  127. </el-form-item>
  128. <el-form-item label="约束处理方法:" :label-width="formLabelWidth200">
  129. <el-select v-model="youhua.icstr" :suffix-icon="CaretBottom" placeholder="请选择">
  130. <el-option v-for="item in daililist9" :key="item.value" :label="item.label" :value="item.value">
  131. </el-option>
  132. </el-select>
  133. </el-form-item>
  134. <el-form-item label="种群规模:" :label-width="formLabelWidth200">
  135. <el-input v-model="youhua.ipopsize" :step="100" :min="0" :max="1000" controls-position="right" />
  136. </el-form-item>
  137. <el-form-item label="最大进化代数:" :label-width="formLabelWidth200">
  138. <el-input v-model="youhua.maxgen" :step="100" :min="0" :max="1000" controls-position="right" />
  139. </el-form-item>
  140. <el-form-item label="交叉概率:" :label-width="formLabelWidth200">
  141. <el-input v-model="youhua.pc" :step="100" :min="0" :max="1000" controls-position="right" />
  142. </el-form-item>
  143. <el-form-item label="变异概率:" :label-width="formLabelWidth200">
  144. <el-input v-model="youhua.pm" :step="100" :min="0" :max="1000" controls-position="right" />
  145. </el-form-item>
  146. </div>
  147. </div>
  148. </template>
  149. <script setup>
  150. import { ref, onMounted, reactive, provide, nextTick } from "vue";
  151. import { ElMessage, ElButton, ElDialog, ElSelect } from 'element-plus'
  152. import { Edit, CaretBottom } from '@element-plus/icons-vue'
  153. import { request } from "@/utils/request";
  154. let formLabelWidth3=ref(100)
  155. let formLabelWidth200=ref(180)
  156. let youhua = ref({
  157. algorithm: 'SurroOpt',
  158. iout: 19,
  159. proscount:'1',
  160. irestart: '0',
  161. ndoe: '0',
  162. ns: 10,
  163. nsmax: 100,
  164. nslf: 20,
  165. nsmaxlf: 200,
  166. nsmk: 10,
  167. nsmaxmk: 100,
  168. xtol: 1e-8,
  169. feasibilitytolreal: -1e-6,
  170. feasibilitytolsurro: -1e-6,
  171. surromod: 'Kriging',
  172. corr: '0',
  173. consttheta: '1',
  174. porder: '0',
  175. dcmp: '0',
  176. paraopt: '1',
  177. regular: '0',
  178. infill: '11',
  179. nparallel: 1,
  180. iopt: '0',
  181. icstr: '0',
  182. ipopsize: 50,
  183. maxgen: 100,
  184. pc: 0.9,
  185. pm: 0.05
  186. })
  187. let pid = ref();
  188. let wid = ref();
  189. let suid = ref();
  190. let cstnum=ref('');
  191. let yslist = ref([
  192. { label: 'SurroOpt', value: 'SurroOpt' },
  193. ])
  194. let cswitch = ref([
  195. { label: '是', value: '1' },
  196. { label: '否', value: '0' },
  197. ])
  198. let tdlist = ref([
  199. {label:'拉丁超立方LHS',value:'0'},
  200. {label:'均匀设计UD',value:'1'},
  201. {label:'蒙特卡洛MCD',value:'2'},
  202. ])
  203. let nsurro = ref("310")
  204. let n_kriging = ref("1")
  205. let daililist = ref([
  206. { label: 'Kriging', value: 'Kriging' },
  207. { label: 'GEK', value: 'GEK' },
  208. { label: 'Co-Kriging', value: 'Co-Kriging' },
  209. { label: 'HK', value: 'HK' },
  210. { label: 'MHK', value: 'MHK' },
  211. ])
  212. let daililist1= ref([
  213. { label: '各向异性高斯指数函数', value: '0' },
  214. { label: '各向同性高斯指数函数', value: '1' },
  215. { label: '三次样条函数', value: '2' },
  216. ])
  217. let daililist2= ref([
  218. { label: '不优化', value: '1' },
  219. { label: '随机初值优化', value: '0' },
  220. { label: '上一轮建模数据作为初值优化', value: '-1' },
  221. ])
  222. let daililist3= ref([
  223. { label: '普通Kriging', value: '0' },
  224. { label: '泛Kriging', value: '1' },
  225. ])
  226. let daililist4= ref([
  227. { label: 'LU分解', value: '0' },
  228. { label: 'Cholesky分解', value: '2' },
  229. { label: '第三方库并行分解', value: '3' },
  230. ])
  231. let daililist5= ref([
  232. { label: 'HookeJeeves', value: '1' },
  233. { label: 'BFGS', value: '2' },
  234. { label: '单纯形搜索方法', value: '3' },
  235. ])
  236. let daililist6= ref([
  237. { label: '不进行正则化', value: '0' },
  238. { label: '常数正则化', value: '1' },
  239. { label: '优化正则化', value: '2' },
  240. ])
  241. let daililist7= ref([
  242. { label: 'EI+MSP', value: '11' },
  243. { label: '局部EI', value: '-1' },
  244. { label: 'EI', value: '1' },
  245. { label: 'MSP', value: '2' },
  246. { label: 'LCB', value: '3' },
  247. { label: 'PI', value: '4' },
  248. { label: 'MSE', value: '5' },
  249. { label: 'MSP+MSE', value: '12' },
  250. ])
  251. let daililist8= ref([
  252. { label: '当前最优+局部优化', value: '0' },
  253. { label: '当前最优+局部优化+GA', value: '1' },
  254. ])
  255. let daililist9= ref([
  256. { label: '概率相乘法', value: '0' },
  257. ])
  258. const handlesurromodChange = (val) => {
  259. if(val === 'Kriging') {
  260. nsurro.value ="310"
  261. n_kriging.value = "1"
  262. }else if(val === 'GEK'){
  263. nsurro.value ="310"
  264. n_kriging.value = "2"
  265. }else if(val === 'Co-Kriging'){
  266. nsurro.value ="410"
  267. n_kriging.value = "1"
  268. }else if(val === 'HK'){
  269. nsurro.value ="4"
  270. n_kriging.value = "12"
  271. }else if(val === 'MHK'){
  272. nsurro.value ="4"
  273. n_kriging.value = "12"
  274. }
  275. }
  276. const getDoptimize = (id,nowid) => {
  277. pid.value = id;
  278. wid.value = nowid;
  279. const params = {
  280. transCode: 'MDO0031',
  281. pid: pid.value,
  282. wid: wid.value,
  283. }
  284. request(params).then((res) => {
  285. console.log('chushihua')
  286. if (res.hasOwnProperty('suid')) {
  287. getDoptimizeAssign(res);
  288. } else {
  289. }
  290. })
  291. .catch((err) => {
  292. ElMessage.error(err.returnMsg)
  293. })
  294. }
  295. const getDoptimizeAssign = (data) => {
  296. pid.value = data.pid
  297. suid.value = data.suid;
  298. youhua.value.algorithm = data.algorithm;
  299. youhua.value.iout = data.iout;
  300. youhua.value.irestart = data.irestart;
  301. youhua.value.ndoe = data.ndoe;
  302. youhua.value.ns = data.ns;
  303. youhua.value.nsmax = data.nsmax;
  304. youhua.value.nslf = data.nslf;
  305. youhua.value.nsmaxlf = data.nsmaxlf;
  306. youhua.value.nsmk = data.nsmk;
  307. youhua.value.nsmaxmk = data.nsmaxmk;
  308. youhua.value.xtol = data.xtol;
  309. youhua.value.feasibilitytolreal = data.feasibilitytolreal;
  310. youhua.value.feasibilitytolsurro = data.feasibilitytolsurro;
  311. youhua.value.surromod = data.surromod;
  312. youhua.value.corr = data.corr;
  313. youhua.value.consttheta = data.consttheta;
  314. youhua.value.porder = data.porder;
  315. youhua.value.dcmp = data.dcmp;
  316. youhua.value.paraopt = data.paraopt;
  317. youhua.value.regular = data.regular;
  318. youhua.value.infill = data.infill;
  319. youhua.value.nparallel = data.nparallel;
  320. youhua.value.iopt = data.iopt;
  321. youhua.value.icstr = data.icstr;
  322. youhua.value.ipopsize = data.ipopsize;
  323. youhua.value.maxgen = data.maxgen;
  324. youhua.value.pc = data.pc;
  325. youhua.value.pm = data.pm;
  326. }
  327. //代理优化器,添加保存
  328. const getaddDsave = (id,nowid) => {
  329. if(nowid){
  330. wid.value = nowid
  331. }
  332. pid.value = id;
  333. const params = {
  334. transCode: 'MDO0032',
  335. pid: pid.value,
  336. wid: wid.value,
  337. suid: suid.value,
  338. nsurro:nsurro.value,
  339. nkriging:n_kriging.value,
  340. algorithm: youhua.value.algorithm,
  341. iout: youhua.value.iout,
  342. irestart: youhua.value.irestart,
  343. ndoe: youhua.value.ndoe,
  344. ns: youhua.value.ns,
  345. nsmax: youhua.value.nsmax,
  346. nslf: youhua.value.nslf,
  347. nsmaxlf: youhua.value.nsmaxlf,
  348. nsmk: youhua.value.nsmk,
  349. nsmaxmk: youhua.value.nsmaxmk,
  350. xtol: youhua.value.xtol,
  351. feasibilitytolreal: youhua.value.feasibilitytolreal,
  352. feasibilitytolsurro: youhua.value.feasibilitytolsurro,
  353. surromod: youhua.value.surromod,
  354. corr: youhua.value.corr,
  355. consttheta: youhua.value.consttheta,
  356. porder: youhua.value.porder,
  357. dcmp: youhua.value.dcmp,
  358. paraopt: youhua.value.paraopt,
  359. regular: youhua.value.regular,
  360. infill: youhua.value.infill,
  361. nparallel: youhua.value.nparallel,
  362. iopt: youhua.value.iopt,
  363. icstr: youhua.value.icstr,
  364. ipopsize: youhua.value.ipopsize,
  365. maxgen: youhua.value.maxgen,
  366. pc: youhua.value.pc,
  367. pm: youhua.value.pm,
  368. checked:1
  369. }
  370. request(params).then((res) => {
  371. ElMessage({
  372. message: '保存成功',
  373. type: 'success'
  374. })
  375. })
  376. .catch((err) => {
  377. ElMessage.error('保存失败')
  378. })
  379. }
  380. defineExpose({
  381. getDoptimize,
  382. getDoptimizeAssign,
  383. getaddDsave
  384. });
  385. </script>