|
@@ -389,7 +389,7 @@
|
|
|
<div>
|
|
|
<!-- <div class="title2">GA遗传算法</div> -->
|
|
|
<el-form-item label="优化算法" :label-width="formLabelWidth1">
|
|
|
- <el-select v-model="ys" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
+ <el-select v-model="youhua.algorithm" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
<el-option
|
|
|
v-for="item in yslist"
|
|
|
:key="item.value"
|
|
@@ -399,19 +399,19 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="种群规模:" :label-width="formLabelWidth1">
|
|
|
- <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
|
|
|
+ <el-input-number v-model="youhua.popsize" :min="1" :max="10" controls-position="right" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="最大进化代数:" :label-width="formLabelWidth1">
|
|
|
- <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
|
|
|
+ <el-form-item label="进化代数:" :label-width="formLabelWidth1">
|
|
|
+ <el-input-number v-model="youhua.epoch" :min="1" :max="10" controls-position="right" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="交叉概率:" :label-width="formLabelWidth1">
|
|
|
- <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
|
|
|
+ <el-input-number v-model="youhua.probcrossover" :min="1" :max="10" controls-position="right" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="变异概率:" :label-width="formLabelWidth1">
|
|
|
- <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
|
|
|
+ <el-input-number v-model="youhua.probmut" :min="1" :max="10" controls-position="right" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="交叉算子:" :label-width="formLabelWidth1">
|
|
|
- <el-select v-model="addval2" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
+ <el-select v-model="youhua.proboperator" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
<el-option
|
|
|
v-for="item in addlist2"
|
|
|
:key="item.value"
|
|
@@ -421,10 +421,10 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="竞赛规模:" :label-width="formLabelWidth1">
|
|
|
- <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
|
|
|
+ <el-input-number v-model="youhua.probscale" :min="1" :max="10" controls-position="right" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="保留优选策略:" :label-width="formLabelWidth1">
|
|
|
- <el-select v-model="addval3" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
+ <el-select v-model="youhua.strategy" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
<el-option
|
|
|
v-for="item in addlist3"
|
|
|
:key="item.value"
|
|
@@ -434,7 +434,7 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="变异算子选择:" :label-width="formLabelWidth1">
|
|
|
- <el-select v-model="addval4" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
+ <el-select v-model="youhua.operator" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
<el-option
|
|
|
v-for="item in addlist4"
|
|
|
:key="item.value"
|
|
@@ -443,7 +443,7 @@
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="precision:" :label-width="formLabelWidth1">
|
|
|
+ <!-- <el-form-item label="precision:" :label-width="formLabelWidth1">
|
|
|
<el-select v-model="addval7" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
<el-option
|
|
|
v-for="item in addlist7"
|
|
@@ -452,9 +452,9 @@
|
|
|
:value="item.value">
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
- </el-form-item>
|
|
|
+ </el-form-item> -->
|
|
|
<el-form-item label="GPU" :label-width="formLabelWidth1">
|
|
|
- <el-select v-model="addval8" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
+ <el-select v-model="youhua.gpu" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
<el-option
|
|
|
v-for="item in addlist8"
|
|
|
:key="item.value"
|
|
@@ -805,7 +805,7 @@
|
|
|
<div class="numberinput lefttext">
|
|
|
<el-form >
|
|
|
<el-form-item label="优化算法:" :label-width="formLabelWidth1">
|
|
|
- <el-select v-model="ys" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
+ <el-select v-model="youhua.algorithm" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
<el-option
|
|
|
v-for="item in yslist"
|
|
|
:key="item.value"
|
|
@@ -815,19 +815,19 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="种群规模:" :label-width="formLabelWidth1">
|
|
|
- <el-input-number v-model="num" :step="100" :min="1" :max="1000" controls-position="right" />
|
|
|
+ <el-input-number v-model="youhua.popsize" :step="100" :min="0" :max="1000" controls-position="right" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="迭代次数:" :label-width="formLabelWidth1">
|
|
|
- <el-input-number v-model="num" :step="100" :min="1" :max="1000" controls-position="right" />
|
|
|
+ <el-input-number v-model="youhua.epoch" :step="100" :min="0" :max="1000" controls-position="right" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="交叉概率:" :label-width="formLabelWidth1">
|
|
|
- <el-input-number v-model="num" :step="0.1" :min="1" :max="1000" controls-position="right" />
|
|
|
+ <el-input-number v-model="youhua.probcrossover" :step="0.1" :min="0" :max="1000" controls-position="right" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="变异概率:" :label-width="formLabelWidth1">
|
|
|
- <el-input-number v-model="num" :step="0.1" :min="1" :max="1000" controls-position="right" />
|
|
|
+ <el-input-number v-model="youhua.probmut" :step="0.1" :min="0" :max="1000" controls-position="right" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="交叉算子:" :label-width="formLabelWidth1">
|
|
|
- <el-select v-model="addval2" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
+ <el-select v-model="youhua.proboperator" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
<el-option
|
|
|
v-for="item in addlist2"
|
|
|
:key="item.value"
|
|
@@ -837,10 +837,10 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="竞赛规模:" :label-width="formLabelWidth1">
|
|
|
- <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
|
|
|
+ <el-input-number v-model="youhua.probscale" :min="0" :max="100" controls-position="right" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="保留优选策略:" :label-width="formLabelWidth1">
|
|
|
- <el-select v-model="addval3" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
+ <el-select v-model="youhua.strategy" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
<el-option
|
|
|
v-for="item in addlist3"
|
|
|
:key="item.value"
|
|
@@ -850,7 +850,7 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="变异算子选择:" :label-width="formLabelWidth1">
|
|
|
- <el-select v-model="addval4" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
+ <el-select v-model="youhua.operator" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
<el-option
|
|
|
v-for="item in addlist4"
|
|
|
:key="item.value"
|
|
@@ -860,7 +860,7 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="GPU" :label-width="formLabelWidth1">
|
|
|
- <el-select v-model="addval8" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
+ <el-select v-model="youhua.gpu" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
<el-option
|
|
|
v-for="item in addlist8"
|
|
|
:key="item.value"
|
|
@@ -874,7 +874,7 @@
|
|
|
<template #footer>
|
|
|
<div class="dialog-footer">
|
|
|
<el-button @click="dialog.jboptimizer = false">取消</el-button>
|
|
|
- <el-button type="primary" @click="dialog.jboptimizer = false">
|
|
|
+ <el-button type="primary" @click="getaddsave(); dialog.jboptimizer = false">
|
|
|
确定
|
|
|
</el-button>
|
|
|
</div>
|
|
@@ -1066,7 +1066,7 @@
|
|
|
<div class="footerTitle el-tag--primary">
|
|
|
<div >
|
|
|
<span v-for="(tab, index) in tabs" :key="index" :class="{ 'active': activeIndex === index }"
|
|
|
- @click="activeIndex = index">{{ tab }}</span>
|
|
|
+ @click="xxclick(index)">{{ tab }}</span>
|
|
|
</div>
|
|
|
<div>
|
|
|
<!-- <li
|
|
@@ -1096,7 +1096,7 @@
|
|
|
<div class="youhualog" v-if="activeIndex==1">
|
|
|
<ul>
|
|
|
<li v-for="(tab, index) in listli" :key="index" :class="{ 'active2': activeIndex2 === index }"
|
|
|
- @click="activeIndex2 = index">{{ tab }}</li>
|
|
|
+ @click="issueclick(index)">{{ tab }}</li>
|
|
|
</ul>
|
|
|
<div class="footer-content">
|
|
|
<div class="eldesign classtable" v-if="activeIndex2==0">
|
|
@@ -1112,14 +1112,14 @@
|
|
|
<el-input v-model="row.date" @change="handleEdit(row)" />
|
|
|
</template>
|
|
|
</el-table-column> -->
|
|
|
- <el-table-column prop="s1" label="上限值">
|
|
|
+ <el-table-column prop="upper" label="上限值">
|
|
|
<template #default="{ row }">
|
|
|
- <el-input v-model.Number="row.s1" oninput ="value=value.replace(/^|[^0-9]/g,'')" @change="handleEdit(row)" />
|
|
|
+ <el-input type="text" v-model="row.upper" oninput ="value=value.replace(/^|[^0-9]/g,'')" @change="handleEdit(row)" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="x1" label="下限值">
|
|
|
+ <el-table-column prop="lower" label="下限值">
|
|
|
<template #default="{ row }">
|
|
|
- <el-input v-model.Number="row.x1" oninput ="value=value.replace(/^|[^0-9]/g,'')" @change="handleEdit(row)" />
|
|
|
+ <el-input v-model.Number="row.lower" oninput ="value=value.replace(/^|[^0-9]/g,'')" @change="handleEdit(row)" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<!-- <el-table-column prop="q" label="权重系数">
|
|
@@ -1127,14 +1127,14 @@
|
|
|
<el-input v-model="row.q" @change="handleEdit(row)" />
|
|
|
</template>
|
|
|
</el-table-column> -->
|
|
|
- <el-table-column prop="f" label="基准值" width="100">
|
|
|
+ <el-table-column prop="reference" label="基准值" width="100">
|
|
|
<template #default="{ row }">
|
|
|
- <el-input v-model.Number="row.f" oninput ="value=value.replace(/^|[^0-9]/g,'')" @change="handleEdit(row)" />
|
|
|
+ <el-input v-model.Number="row.reference" oninput ="value=value.replace(/^|[^0-9]/g,'')" @change="handleEdit(row)" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="d" label="说明">
|
|
|
+ <el-table-column prop="remark" label="说明">
|
|
|
<template #default="{ row }">
|
|
|
- <el-input v-model="row.d" @change="handleEdit(row)" />
|
|
|
+ <el-input v-model="row.remark" @change="handleEdit(row)" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
@@ -1156,14 +1156,14 @@
|
|
|
|
|
|
</template>
|
|
|
</el-table-column> -->
|
|
|
- <el-table-column prop="address" label="约束名称">
|
|
|
+ <el-table-column prop="name" label="约束名称">
|
|
|
<template #default="{ row }">
|
|
|
<el-input v-model="row.name" @change="handleEdit(row)" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="name" label="约束关系" >
|
|
|
+ <el-table-column prop="con" label="约束关系" >
|
|
|
<template v-slot="scope">
|
|
|
- <el-select class="no-border " v-model="scope.row.da" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
+ <el-select class="no-border " v-model.number="scope.row.con" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
<el-option
|
|
|
v-for="item in options3"
|
|
|
:key="item.value"
|
|
@@ -1174,9 +1174,9 @@
|
|
|
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="address" label="约束基准值">
|
|
|
+ <el-table-column prop="reference" label="约束基准值">
|
|
|
<template #default="{ row }">
|
|
|
- <el-input v-model.Number="row.address" oninput ="value=value.replace(/^|[^0-9]/g,'')" @change="handleEdit(row)" />
|
|
|
+ <el-input v-model.Number="row.reference" oninput ="value=value.replace(/^|[^0-9]/g,'')" @change="handleEdit(row)" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
@@ -1208,9 +1208,9 @@
|
|
|
<el-input v-model="row.name" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="f" label="优化方向">
|
|
|
+ <el-table-column prop="optdir" label="优化方向">
|
|
|
<template v-slot="scope">
|
|
|
- <el-select class="no-border " v-model="scope.row.f" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
+ <el-select class="no-border " v-model="scope.row.optdir" :suffix-icon="CaretBottom" placeholder="请选择">
|
|
|
<el-option
|
|
|
v-for="item in options1"
|
|
|
:key="item.value"
|
|
@@ -1221,26 +1221,26 @@
|
|
|
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="q" label="权重系数">
|
|
|
+ <el-table-column prop="weight" label="权重系数">
|
|
|
<template #default="{ row }">
|
|
|
- <el-input v-model.number="row.q" oninput ="value=value.replace(/^|[^0-9]/g,'')" @change="handleEdit(row)" />
|
|
|
+ <el-input v-model.number="row.weight" oninput ="value=value.replace(/^|[^0-9]/g,'')" @change="handleEdit(row)" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="s" label="数据缩放">
|
|
|
+ <el-table-column prop="scaling" label="数据缩放">
|
|
|
<!-- :label="scope.row.s?'采用':'不采用'" -->
|
|
|
<template v-slot="scope">
|
|
|
- <el-checkbox :false-label="0" :true-label="1" :label="scope.row.s?'采用':'不采用'" v-model="scope.row.s" />
|
|
|
+ <el-checkbox :false-label="0" :true-label="1" v-model="scope.row.scaling" />
|
|
|
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="yin" label="缩放因子">
|
|
|
+ <el-table-column prop="factor" label="缩放因子">
|
|
|
<template #default="{ row }">
|
|
|
- <el-input v-model.number="row.yin" oninput ="value=value.replace(/^|[^0-9]/g,'')" @change="handleEdit(row)" />
|
|
|
+ <el-input v-model.number="row.factor" oninput ="value=value.replace(/^|[^0-9]/g,'')" @change="handleEdit(row)" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="d" label="说明" >
|
|
|
+ <el-table-column prop="remark" label="说明" >
|
|
|
<template #default="{ row }">
|
|
|
- <el-input v-model="row.d" @change="handleEdit(row)" />
|
|
|
+ <el-input v-model="row.remark" @change="handleEdit(row)" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
@@ -1303,6 +1303,27 @@
|
|
|
import Sidebar from './vuetree/Sidebar.vue'
|
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
|
+ let youhua=ref({
|
|
|
+ algorithm:'GA',
|
|
|
+ popsize:100,
|
|
|
+ epoch:100,
|
|
|
+ probcrossover:0.1,
|
|
|
+ probmut:0.1,
|
|
|
+ proboperator:'SBX交叉',
|
|
|
+ probscale:1,
|
|
|
+ strategy:'最佳保留策略',
|
|
|
+ operator:'倒位变异',
|
|
|
+ gpu:'YES'
|
|
|
+ })
|
|
|
+ let websock=ref(null);
|
|
|
+ let times=ref({
|
|
|
+ lockReconnect: false, //是否真正建立连接
|
|
|
+ timeout: 28 * 1000, //30秒一次心跳
|
|
|
+ timeoutObj: null, //心跳倒计时
|
|
|
+ serverTimeout0bj: null, //
|
|
|
+ timeoutnum: null, //断开重连倒计时
|
|
|
+ })
|
|
|
+ let eid=ref('');//进步优化器的eid
|
|
|
let logs=ref("");
|
|
|
let pid=ref("");
|
|
|
let fid=ref('');
|
|
@@ -1498,7 +1519,7 @@ let options3=ref([
|
|
|
{ label: 'SBX交叉', value: 'SBX交叉' },
|
|
|
])
|
|
|
let addval3=ref("最佳保留策略")
|
|
|
- let ys=ref("GA遗传算法")
|
|
|
+ let ys=ref("GA")
|
|
|
let addlist3 = ref([
|
|
|
{ label: '最佳保留策略', value: '最佳保留策略' },
|
|
|
])
|
|
@@ -1576,34 +1597,9 @@ let options3=ref([
|
|
|
],
|
|
|
},
|
|
|
]
|
|
|
- const eloptimize = ref([
|
|
|
- {
|
|
|
- name:"f1",
|
|
|
- f: 1,
|
|
|
- q: 1,
|
|
|
- s: 0,
|
|
|
- yin:1,
|
|
|
- d:'shuo',
|
|
|
- }
|
|
|
- ])
|
|
|
- const tableData = ref([
|
|
|
- {
|
|
|
- name: 'g1',
|
|
|
- da:-1,
|
|
|
- address:''
|
|
|
-
|
|
|
- },
|
|
|
- ])
|
|
|
- const designtable = ref([
|
|
|
- {
|
|
|
- name:"x1",
|
|
|
- s1:0,
|
|
|
- x1:0,
|
|
|
- f:0,
|
|
|
- d:''
|
|
|
-
|
|
|
- }
|
|
|
- ])
|
|
|
+ const eloptimize = ref([])
|
|
|
+ const tableData = ref([])
|
|
|
+ const designtable = ref([])
|
|
|
const tasktable = ref([
|
|
|
{
|
|
|
id:"01",
|
|
@@ -1667,6 +1663,7 @@ let options3=ref([
|
|
|
onMounted(() => {
|
|
|
setTimeout(function() {
|
|
|
init();
|
|
|
+ initWebSocket();
|
|
|
}, 1500);
|
|
|
// childfun();
|
|
|
|
|
@@ -1678,8 +1675,8 @@ pid.value=route.query.pid;
|
|
|
console.log(route.query.pid);
|
|
|
}
|
|
|
const handleClick = (tab, event) => {
|
|
|
-
|
|
|
console.log(tab.props.name);
|
|
|
+
|
|
|
tabactive.value=tab.props.name;
|
|
|
if(tabactive.value=='User'){
|
|
|
router.replace({ path: '/' })
|
|
@@ -1719,6 +1716,7 @@ console.log(route.query.pid);
|
|
|
dialog.value.optimizer=true;
|
|
|
}else if(val=='进化优化器'){
|
|
|
dialog.value.jboptimizer=true;
|
|
|
+ getoptimize();
|
|
|
}else if(val=='AirfoilAero'||val=='Rosenbrock'){
|
|
|
importget();
|
|
|
dialog.value.Xfiol=true;
|
|
@@ -1784,10 +1782,91 @@ console.log(route.query.pid);
|
|
|
break;
|
|
|
case "数据流连线":
|
|
|
vuefval.value.linestrokeWidth(3);
|
|
|
- console.log("数据流")
|
|
|
+ break;
|
|
|
+ case "开始":
|
|
|
+ runok();
|
|
|
+
|
|
|
default:
|
|
|
}
|
|
|
}
|
|
|
+ // 求解
|
|
|
+ const runok= ()=>{
|
|
|
+ const params = {
|
|
|
+ transCode: 'MDO0020',
|
|
|
+ pid:pid.value,
|
|
|
+
|
|
|
+ }
|
|
|
+ request(params)
|
|
|
+ .then((res) => {
|
|
|
+ ElMessage({
|
|
|
+ message: "开始运行",
|
|
|
+ type: 'success',
|
|
|
+ })
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ ElMessage.error(err.returnMsg)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ //进化优化器
|
|
|
+ const getoptimize = () => {
|
|
|
+ const params = {
|
|
|
+ transCode: 'MDO0018',
|
|
|
+ pid:pid.value,
|
|
|
+ }
|
|
|
+ request(params)
|
|
|
+ .then((res) => {
|
|
|
+
|
|
|
+ if(res.hasOwnProperty('eid')){
|
|
|
+
|
|
|
+ eid.value=res.eid;
|
|
|
+ youhua.value.algorithm= res.algorithm
|
|
|
+ youhua.value.popsize = Number(res.popsize); // 将id属性转换为数字
|
|
|
+ youhua.value.epoch = Number(res.epoch);
|
|
|
+ youhua.value.probcrossover = Number(res.probcrossover);
|
|
|
+ youhua.value.probmut = Number(res.probmut);
|
|
|
+ youhua.value.probscale = Number(res.probscale);
|
|
|
+ youhua.value.proboperator= res.proboperator;
|
|
|
+ youhua.value.strategy= res.strategy;
|
|
|
+ youhua.value.operator= res.operator;
|
|
|
+ youhua.value.gpu= res.gpu;
|
|
|
+
|
|
|
+ // youhua=res;
|
|
|
+
|
|
|
+ }else{
|
|
|
+ youhua=res;
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ ElMessage.error(err.returnMsg)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ //进化优化器 添加保存
|
|
|
+ const getaddsave = () => {
|
|
|
+ const params = {
|
|
|
+ transCode: 'MDO0019',
|
|
|
+ pid:pid.value,
|
|
|
+ eid:eid.value,
|
|
|
+ algorithm:youhua.value.algorithm,
|
|
|
+ popsize:youhua.value.popsize,
|
|
|
+ epoch:youhua.value.epoch,
|
|
|
+ probcrossover:youhua.value.probcrossover,
|
|
|
+ probmut:youhua.value.probmut,
|
|
|
+ proboperator:youhua.value.proboperator,
|
|
|
+ probscale:youhua.value.probscale,
|
|
|
+ strategy:youhua.value.strategy,
|
|
|
+ operator:youhua.value.operator,
|
|
|
+ gpu:youhua.value.gpu
|
|
|
+
|
|
|
+ }
|
|
|
+ request(params)
|
|
|
+ .then((res) => {
|
|
|
+ console.log(res);
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ ElMessage.error(err.returnMsg)
|
|
|
+ })
|
|
|
+ }
|
|
|
//选择颜色改变线的颜色
|
|
|
const colorpicker = (e) => {
|
|
|
vuefval.value.changeAllEdgesColor(color1.value);
|
|
@@ -1812,19 +1891,19 @@ console.log(route.query.pid);
|
|
|
for (let i = 0; i < tablevalnum; i++) {
|
|
|
designtable.value.push( {
|
|
|
name:"x1",
|
|
|
- s1:0,
|
|
|
- x1:0,
|
|
|
- f:0,
|
|
|
- d:''
|
|
|
+ upper:null,
|
|
|
+ lower:null,
|
|
|
+ reference:null,
|
|
|
+ remark:''
|
|
|
|
|
|
})
|
|
|
}
|
|
|
} else if(activeIndex2.value==1){
|
|
|
for (let i = 0; i < tablevalnum; i++) {
|
|
|
- tableData.value.push( {
|
|
|
+ tableData.value.push({
|
|
|
name: 'g1',
|
|
|
- da:-1,
|
|
|
- address:''
|
|
|
+ con:-1,
|
|
|
+ reference:''
|
|
|
|
|
|
})
|
|
|
}
|
|
@@ -1832,21 +1911,109 @@ console.log(route.query.pid);
|
|
|
for (let i = 0; i < tablevalnum; i++) {
|
|
|
eloptimize.value.push({
|
|
|
name:"",
|
|
|
- f:1,
|
|
|
- q:0,
|
|
|
- s:0,
|
|
|
- yin:0,
|
|
|
- d:'',
|
|
|
+ optdir:1,
|
|
|
+ weight:0,
|
|
|
+ scaling:0,
|
|
|
+ factor:0,
|
|
|
+ remark:'',
|
|
|
})
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
+ const xxclick=(index)=>{
|
|
|
+ activeIndex.value=index
|
|
|
+ if(activeIndex.value==0){
|
|
|
+
|
|
|
+ }else if(activeIndex.value==1){
|
|
|
+ getissue();
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+//底部优化问题
|
|
|
+const issueclick=(index)=>{
|
|
|
+ activeIndex2.value = index;
|
|
|
+ console.log(activeIndex2.value);
|
|
|
+ if(activeIndex2.value==0){
|
|
|
+ getissue();
|
|
|
+ }else if(activeIndex2.value==1){
|
|
|
+ getyueshu();
|
|
|
+
|
|
|
+ }else if(activeIndex2.value==2){
|
|
|
+ getmub();
|
|
|
+}
|
|
|
+}
|
|
|
+//变量设计查询
|
|
|
+const getissue=()=>{
|
|
|
+ const params = {
|
|
|
+ transCode: 'MDO0022',
|
|
|
+ pid:pid.value,
|
|
|
+ }
|
|
|
+ request(params)
|
|
|
+ .then((res) => {
|
|
|
+
|
|
|
+ res.rows = res.rows.map(item => {
|
|
|
+ item.lower = Number(item.lower); // 将id属性转换为数字
|
|
|
+ item.upper = Number(item.upper);
|
|
|
+ item.upper = Number(item.reference);
|
|
|
+ return item;
|
|
|
+ })
|
|
|
+ designtable.value=res.rows;
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ ElMessage.error(err.returnMsg)
|
|
|
+ })
|
|
|
+}
|
|
|
+//约束条件查询
|
|
|
+const getyueshu=()=>{
|
|
|
+ const params = {
|
|
|
+ transCode: 'MDO0023',
|
|
|
+ pid:pid.value,
|
|
|
+ }
|
|
|
+ request(params)
|
|
|
+ .then((res) => {
|
|
|
+ res.rows = res.rows.map(item => {
|
|
|
+ item.con = Number(item.con); // 将id属性转换为数字
|
|
|
+ item.reference = Number(item.reference);
|
|
|
+
|
|
|
+ return item;
|
|
|
+ })
|
|
|
+ tableData.value=res.rows;
|
|
|
+
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ ElMessage.error(err.returnMsg)
|
|
|
+ })
|
|
|
+}
|
|
|
+//目标函数查询
|
|
|
+const getmub=()=>{
|
|
|
+ const params = {
|
|
|
+ transCode: 'MDO0024',
|
|
|
+ pid:pid.value,
|
|
|
+ }
|
|
|
+ request(params)
|
|
|
+ .then((res) => {
|
|
|
+ res.rows = res.rows.map(item => {
|
|
|
+ item.optdir = Number(item.optdir); // 将id属性转换为数字
|
|
|
+ item.weight = Number(item.weight);
|
|
|
+ item.scaling = Number(item.scaling);
|
|
|
+ item.factor = Number(item.factor);
|
|
|
+ return item;
|
|
|
+ })
|
|
|
+ eloptimize.value=res.rows;
|
|
|
+
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ ElMessage.error(err.returnMsg)
|
|
|
+ })
|
|
|
+}
|
|
|
//对象数组转化字符串
|
|
|
const getarr=(name,arrays)=>{
|
|
|
+ console.log(arrays)
|
|
|
for (let i = 0; i < arrays.length; i++) {
|
|
|
let arr=[];
|
|
|
+ let att=[];
|
|
|
for (const key in arrays[i]) {
|
|
|
if ( arrays[i].hasOwnProperty(key)) {
|
|
|
arr.push(arrays[i][key]);
|
|
@@ -1859,14 +2026,20 @@ for (let j = 0; j < arr.length; j++) {
|
|
|
arr[j]=" ";
|
|
|
}
|
|
|
}
|
|
|
-console.log(arr)
|
|
|
- const valuesWithSemiColons = arr.join(',');
|
|
|
+if(arrays[i].hasOwnProperty('pid')==true){
|
|
|
+ att=arr.slice(1,-1);
|
|
|
+}else{
|
|
|
+ att=arr;
|
|
|
+}
|
|
|
+
|
|
|
+ const valuesWithSemiColons = att.join(',');
|
|
|
name+= valuesWithSemiColons + ';';
|
|
|
|
|
|
}
|
|
|
console.log(name)
|
|
|
return name;
|
|
|
}
|
|
|
+//保存优化问题
|
|
|
const onokItem=()=>{
|
|
|
console.log(activeIndex2.value);
|
|
|
if(activeIndex2.value==0){
|
|
@@ -2131,6 +2304,87 @@ const params = {
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
+//websockct的连接
|
|
|
+function initWebSocket() {
|
|
|
+ //初始化weosocket
|
|
|
+
|
|
|
+ // const wsuri = "ws://192.168.0.43:8087//websocket?projectId="+this.pid; ws://192.168.0.131/diswebsocket?projectId=5
|
|
|
+ const wsurl = "ws://192.168.104:8188//websocket?projectId="+pid.value;
|
|
|
+ // const wsurl =
|
|
|
+ // "ws://" +
|
|
|
+ // process.env.VUE_APP_BASE_websokt +
|
|
|
+ // "/diswebsocket?projectId=" +'5'
|
|
|
+ // aid.value;
|
|
|
+ websock = new WebSocket(wsurl);
|
|
|
+ websock.onopen = websocketonopen;
|
|
|
+ websock.onmessage = websocketonmessage;
|
|
|
+ websock.onerror = websocketonerror;
|
|
|
+ websock.onclose = websocketclose;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Websoket连接成功事件
|
|
|
+ const websocketonopen = (res) => {
|
|
|
+ console.log("WebSocket连接成功", res);
|
|
|
+ console.log(res.data);
|
|
|
+ start();
|
|
|
+ };
|
|
|
+ // Websoket接收消息事件
|
|
|
+ const websocketonmessage = (res) => {
|
|
|
+ // console.log("数据", res);
|
|
|
+ //logs.value=res.data;
|
|
|
+
|
|
|
+
|
|
|
+ reset();
|
|
|
+ };
|
|
|
+ // Websoket连接错误事件
|
|
|
+ const websocketonerror = (res) => {
|
|
|
+ console.log("连接错误", res);
|
|
|
+ socket.close();
|
|
|
+ reconnect();
|
|
|
+ };
|
|
|
+ // Websoket断开事件
|
|
|
+ const websocketclose = (res) => {
|
|
|
+ console.log("断开连接", res);
|
|
|
+ };
|
|
|
+ // 创建 websocket 的实例
|
|
|
+
|
|
|
+ // 心跳包
|
|
|
+ const reconnect = () => {
|
|
|
+ if (times.value.lockReconnect) return;
|
|
|
+ times.value.lockReconnect = true;
|
|
|
+ //没连接上会一直重连,设置延迟避免请求过多
|
|
|
+ times.value.timeoutnum && clearTimeout(times.value.timeoutnum);
|
|
|
+ times.value.timeoutnum = setTimeout(function () {
|
|
|
+ //新连接
|
|
|
+ initWebSocket();
|
|
|
+ times.value.lockReconnect = false;
|
|
|
+ }, 10000);
|
|
|
+ }
|
|
|
+ const reset = () => {
|
|
|
+ //重置心跳
|
|
|
+ clearTimeout(times.value.timeoutObj);
|
|
|
+ clearTimeout(times.value.serverTimeoutObj);
|
|
|
+ start();
|
|
|
+ }
|
|
|
+ const start = () => {
|
|
|
+ //开启心跳
|
|
|
+ times.value.timeoutObj && clearTimeout(times.value.timeoutObj);
|
|
|
+ times.value.serverTimeoutObj && clearTimeout(times.value.serverTimeoutObj);
|
|
|
+ times.value.timeoutObj = setTimeout(function () {
|
|
|
+ //这里发送一个心跳,后端收到后,返回一个心跳消息
|
|
|
+ if (websock.readyState == 1) {
|
|
|
+ //如果连接正常
|
|
|
+ websock.send("heartCheck");
|
|
|
+ } else {
|
|
|
+ //否则重连
|
|
|
+ reconnect();
|
|
|
+ }
|
|
|
+ times.value.serverTimeoutObj = setTimeout(function () {
|
|
|
+ // 超时关闭
|
|
|
+ websock.close(); //如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
|
|
|
+ }, times.value.timeout);
|
|
|
+ }, times.value.timeout);
|
|
|
+ }
|
|
|
// 日志框
|
|
|
// 日志的文本框
|
|
|
const footerShows=(evt)=>{
|