Doptimize.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  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>初始 </template>
  34. </el-input>
  35. <el-input type="text" style="margin-right: 10px;" v-model="youhua.nsmax">
  36. <template #prefix>最大</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: '0',
  174. porder: '0',
  175. dcmp: '0',
  176. paraopt: '1',
  177. regular: '0',
  178. infill: '0',
  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 suid = ref();
  189. let cstnum=ref('');
  190. let yslist = ref([
  191. { label: 'SurroOpt', value: 'SurroOpt' },
  192. ])
  193. let cswitch = ref([
  194. { label: '是', value: '1' },
  195. { label: '否', value: '0' },
  196. ])
  197. let tdlist = ref([
  198. {label:'拉丁超立方LHS',value:'0'},
  199. {label:'均匀设计UD',value:'1'},
  200. {label:'蒙特卡洛MCD',value:'2'},
  201. ])
  202. let nsurro = ref(310)
  203. let n_kriging = ref(1)
  204. let daililist = ref([
  205. { label: 'Kriging', value: 'Kriging' },
  206. { label: 'GEK', value: 'GEK' },
  207. { label: 'Co-Kriging', value: 'Co-Kriging' },
  208. { label: 'HK', value: 'HK' },
  209. { label: 'MHK', value: 'MHK' },
  210. ])
  211. let daililist1= ref([
  212. { label: '各向异性高斯指数函数', value: '0' },
  213. { label: '各向同性高斯指数函数', value: '1' },
  214. { label: '三次样条函数', value: '2' },
  215. ])
  216. let daililist2= ref([
  217. { label: '不优化', value: '0' },
  218. { label: '随机初值优化', value: '1' },
  219. { label: '上一轮建模数据作为初值优化', value: '2' },
  220. ])
  221. let daililist3= ref([
  222. { label: '普通Kriging', value: '0' },
  223. { label: '泛Kriging', value: '1' },
  224. ])
  225. let daililist4= ref([
  226. { label: 'LU分解', value: '0' },
  227. { label: 'Cholesky分解', value: '1' },
  228. { label: '第三方库并行分解', value: '2' },
  229. ])
  230. let daililist5= ref([
  231. { label: 'HookeJeeves', value: '1' },
  232. { label: 'BFGS', value: '2' },
  233. { label: '单纯形搜索方法', value: '3' },
  234. ])
  235. let daililist6= ref([
  236. { label: '不进行正则化', value: '0' },
  237. { label: '常数正则化', value: '1' },
  238. { label: '优化正则化', value: '2' },
  239. ])
  240. let daililist7= ref([
  241. { label: 'EI+MSP', value: '0' },
  242. { label: '局部EI', value: '1' },
  243. { label: 'EI', value: '2' },
  244. { label: 'MSP', value: '3' },
  245. { label: 'LCB', value: '4' },
  246. { label: 'PI', value: '5' },
  247. { label: 'MSE', value: '6' },
  248. { label: 'MSP+MSE', value: '7' },
  249. ])
  250. let daililist8= ref([
  251. { label: '当前最优+局部优化', value: '0' },
  252. { label: '当前最优+局部优化+GA', value: '1' },
  253. ])
  254. let daililist9= ref([
  255. { label: '概率相乘法', value: '0' },
  256. ])
  257. const handlesurromodChange = (val) => {
  258. if(val === 'Kriging') {
  259. nsurro.value =310
  260. n_kriging.value = 1
  261. }else if(val === 'GEK'){
  262. nsurro.value =310
  263. n_kriging.value = 2
  264. }else if(val === 'Co-Kriging'){
  265. nsurro.value =410
  266. n_kriging.value = 1
  267. }else if(val === 'HK'){
  268. nsurro.value =4
  269. n_kriging.value = 12
  270. }else if(val === 'MHK'){
  271. nsurro.value =4
  272. n_kriging.value = 12
  273. }
  274. }
  275. const getDoptimize = (id) => {
  276. pid.value = id;
  277. const params = {
  278. transCode: 'MDO0031',
  279. pid: pid.value,
  280. }
  281. request(params).then((res) => {
  282. console.log('chushihua')
  283. if (res.hasOwnProperty('suid')) {
  284. getDoptimizeAssign(res);
  285. } else {
  286. }
  287. })
  288. .catch((err) => {
  289. ElMessage.error(err.returnMsg)
  290. })
  291. }
  292. const getDoptimizeAssign = (data) => {
  293. pid.value = data.pid
  294. suid.value = data.suid;
  295. youhua.value.algorithm = data.algorithm;
  296. youhua.value.iout = data.iout;
  297. youhua.value.irestart = data.irestart;
  298. youhua.value.ndoe = data.ndoe;
  299. youhua.value.ns = data.ns;
  300. youhua.value.nsmax = data.nsmax;
  301. youhua.value.nslf = data.nslf;
  302. youhua.value.nsmaxlf = data.nsmaxlf;
  303. youhua.value.nsmk = data.nsmk;
  304. youhua.value.nsmaxmk = data.nsmaxmk;
  305. youhua.value.xtol = data.xtol;
  306. youhua.value.feasibilitytolreal = data.feasibilitytolreal;
  307. youhua.value.feasibilitytolsurro = data.feasibilitytolsurro;
  308. youhua.value.surromod = data.surromod;
  309. youhua.value.corr = data.corr;
  310. youhua.value.consttheta = data.consttheta;
  311. youhua.value.porder = data.porder;
  312. youhua.value.dcmp = data.dcmp;
  313. youhua.value.paraopt = data.paraopt;
  314. youhua.value.regular = data.regular;
  315. youhua.value.infill = data.infill;
  316. youhua.value.nparallel = data.nparallel;
  317. youhua.value.iopt = data.iopt;
  318. youhua.value.icstr = data.icstr;
  319. youhua.value.ipopsize = data.ipopsize;
  320. youhua.value.maxgen = data.maxgen;
  321. youhua.value.pc = data.pc;
  322. youhua.value.pm = data.pm;
  323. }
  324. //代理优化器,添加保存
  325. const getaddDsave = () => {
  326. const params = {
  327. transCode: 'MDO0032',
  328. pid: pid.value,
  329. suid: suid.value,
  330. nsurro:nsurro.value,
  331. n_kriging:n_kriging.value,
  332. algorithm: youhua.value.algorithm,
  333. iout: youhua.value.iout,
  334. irestart: youhua.value.irestart,
  335. ndoe: youhua.value.ndoe,
  336. ns: youhua.value.ns,
  337. nsmax: youhua.value.nsmax,
  338. nslf: youhua.value.nslf,
  339. nsmaxlf: youhua.value.nsmaxlf,
  340. nsmk: youhua.value.nsmk,
  341. nsmaxmk: youhua.value.nsmaxmk,
  342. xtol: youhua.value.xtol,
  343. feasibilitytolreal: youhua.value.feasibilitytolreal,
  344. feasibilitytolsurro: youhua.value.feasibilitytolsurro,
  345. surromod: youhua.value.surromod,
  346. corr: youhua.value.corr,
  347. consttheta: youhua.value.consttheta,
  348. porder: youhua.value.porder,
  349. dcmp: youhua.value.dcmp,
  350. paraopt: youhua.value.paraopt,
  351. regular: youhua.value.regular,
  352. infill: youhua.value.infill,
  353. nparallel: youhua.value.nparallel,
  354. iopt: youhua.value.iopt,
  355. icstr: youhua.value.icstr,
  356. ipopsize: youhua.value.ipopsize,
  357. maxgen: youhua.value.maxgen,
  358. pc: youhua.value.pc,
  359. pm: youhua.value.pm,
  360. checked:1
  361. }
  362. request(params).then((res) => {
  363. ElMessage({
  364. message: res.returnMsg,
  365. type: 'success'
  366. })
  367. })
  368. .catch((err) => {
  369. ElMessage.error(err.returnMsg)
  370. })
  371. }
  372. defineExpose({
  373. getDoptimize,
  374. getDoptimizeAssign,
  375. getaddDsave
  376. });
  377. </script>