forked from xuyaojian123/Car-Production-Optimization-Problem
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathadd_oneSolution.py
More file actions
295 lines (269 loc) · 10.4 KB
/
add_oneSolution.py
File metadata and controls
295 lines (269 loc) · 10.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@File : add_oneSolution.py
@Author: XuYaoJian
@Date : 2023/2/17 18:55
@Desc :
"""
# 添加一个A闪耀黑、探索绿插入到A闪耀黑,闪耀黑当中,减少喷头的清洗次数
import sys
from copy import deepcopy
from convert import convert_two_to_one
def check_solution(solution, seq_len=103):
if len(solution) == seq_len:
for i in range(seq_len):
if i in solution:
continue
else:
return 0
return 1
else:
return 0
# 插入闪耀黑,探索绿1到n到前面
def add_oneSolution1(new_duan, information_new, results, start, shihei_flag):
tansuolv_len = 0
for i in range(len(new_duan[6]) - 1, -1, -1):
if information_new[new_duan[6][i]][3] == 1 and information_new[new_duan[6][i]][1] == 8:
tansuolv_len += 1
if tansuolv_len < 1:
return
shanyaohei_er = []
shanyaohei_si = []
for i in range(len(new_duan[5])):
if information_new[new_duan[5][i]][3] == 1:
shanyaohei_si.append(new_duan[5][i])
elif information_new[new_duan[5][i]][3] == 0:
shanyaohei_er.append(new_duan[5][i])
else:
sys.exit("错erte误发生而且我平静安定")
B_shanyaohei_len = len(new_duan[4]) - shihei_flag
result_temp = []
B_yu = B_shanyaohei_len % 5
if B_yu == 4:
result_temp.append(shanyaohei_er[0])
shanyaohei_er.pop(0)
elif B_yu == 3:
result_temp.extend(shanyaohei_er[0:2])
shanyaohei_er = shanyaohei_er[2:]
elif B_yu == 2:
result_temp.extend(shanyaohei_er[0:3])
shanyaohei_er = shanyaohei_er[3:]
elif B_yu == 1:
result_temp.extend(shanyaohei_er[0:4])
shanyaohei_er = shanyaohei_er[4:]
for i in range(1, tansuolv_len + 1):
result = deepcopy(result_temp)
# 插入i个
duan = deepcopy(new_duan)
tansuolv = []
flag_num = 0
for j in range(len(duan[6]) - 1, -1, -1):
if information_new[duan[6][j]][3] == 1 and information_new[duan[6][j]][1] == 8:
tansuolv.append(duan[6][j])
duan[6].pop(j)
flag_num += 1
if flag_num == i:
break
# yuxia = len(shanyaohei_er) + len(shanyaohei_si) - (len(tansuolv) - 1) * 4
# if yuxia % 5 != 0:
duan[6].insert(0, tansuolv[-1])
tansuolv.pop(len(tansuolv) - 1)
pos1, pos2, pos3 = 0, 0, 0
if len(tansuolv) > len(shanyaohei_er) * 3 or len(tansuolv) > len(shanyaohei_si):
sys.exit("插入出现546了fawefafa")
while pos1 < len(shanyaohei_er) and pos2 < len(shanyaohei_si) and pos3 < len(tansuolv):
result.extend(shanyaohei_er[pos1:pos1 + 3])
result.extend(shanyaohei_si[pos2:pos2 + 1])
result.extend(tansuolv[pos3:pos3 + 1])
pos1 += 3
pos2 += 1
pos3 += 1
while pos1 < len(shanyaohei_er) and pos2 < len(shanyaohei_si):
result.extend(shanyaohei_er[pos1:pos1 + 1])
result.extend(shanyaohei_si[pos2:pos2 + 2])
pos1 += 1
pos2 += 2
result.extend(shanyaohei_er[pos1:])
# result.extend(shanyaohei_si[pos2:])
duan[5] = result
# 如果A闪耀黑,闪耀黑多了一个四驱车放在最后
A_flag = 0
for j in range(len(duan[5]) - 1, -1, -1):
# 为四驱车,且不为探索绿
if information_new[duan[5][j]][3] == 1 and information_new[duan[5][j]][1] != 8:
is_siqu = information_new[duan[5][j - 1]][3]
if is_siqu != 1:
duan[5][j], duan[5][-1] = duan[5][-1], duan[5][j] # 四驱车和最后一个位置调换
A_flag = 1
break
if A_flag == 0:
for j in range(len(duan[6]) - 1, -1, -1):
if information_new[duan[6][j]][3] == 1:
if information_new[duan[6][j - 1]][3] != 1:
duan[6].insert(1, duan[6][j]) # 四驱车插入到第一个位置
duan[6].pop(j + 1) # 删除四驱车
break
seq = convert_two_to_one(duan)
if check_solution(seq, start) != 1:
sys.exit("序列出错了!6而去214s")
results.append(duan)
def add_oneSolution_commcon(one_duan1,one_duan2, information_new, start):
duan1 = deepcopy(one_duan1)
duan2 = deepcopy(one_duan2)
tansuolv = []
for i in range(len(duan2) - 1, -1, -1):
if information_new[duan2[i]][3] == 1 and information_new[duan2[i]][1] == 8:
tansuolv.append(duan2[i])
duan2.pop(i)
if len(tansuolv) < 3:
print("没有了")
if len(tansuolv) < 1:
return duan1, duan2
shanyaohei_er = []
shanyaohei_si = []
for i in range(len(duan1)):
if information_new[duan1[i]][3] == 1:
shanyaohei_si.append(duan1[i])
elif information_new[duan1[i]][3] == 0:
shanyaohei_er.append(duan1[i])
else:
sys.exit("错erte误发生而且我平静安定")
result = []
yuxia = len(shanyaohei_er) + len(shanyaohei_si) - (len(tansuolv) - 1) * 4
if yuxia % 5 != 0:
duan2.insert(0, tansuolv[-1])
tansuolv.pop(len(tansuolv) - 1)
pos1, pos2, pos3 = 0, 0, 0
if start == 157:
result.append(tansuolv[0])
result.append(shanyaohei_er[0])
result.extend(shanyaohei_si[:2])
result.append(shanyaohei_er[1])
result.append(tansuolv[1])
result.append(shanyaohei_si[2])
result.extend(shanyaohei_er[2:])
duan1 = result
# seq = convert_two_to_one(duan)
# if check_solution(seq, start) != 1:
# sys.exit("序列出879674s")
# results.append(duan)
return duan1, duan2
while pos1 < len(shanyaohei_er) and pos2 < len(shanyaohei_si) and pos3 < len(tansuolv):
result.extend(shanyaohei_er[pos1:pos1 + 3])
result.extend(shanyaohei_si[pos2:pos2 + 1])
result.extend(tansuolv[pos3:pos3 + 1])
pos1 += 3
pos2 += 1
pos3 += 1
while pos1 < len(shanyaohei_er) and pos2 < len(shanyaohei_si):
result.extend(shanyaohei_er[pos1:pos1 + 1])
result.extend(shanyaohei_si[pos2:pos2 + 2])
pos1 += 1
pos2 += 2
result.extend(shanyaohei_er[pos1:])
# result.extend(shanyaohei_si[pos2:])
duan1 = result
# 如果A闪耀黑,闪耀黑多了一个四驱车放在最后
for i in range(len(duan1) - 1, -1, -1):
# 为四驱车,且不为探索绿
if information_new[duan1[i]][3] == 1 and information_new[duan1[i]][1] != 8:
is_siqu = information_new[duan1[i - 1]][3]
if is_siqu != 1:
duan1[i], duan1[-1] = duan1[-1], duan1[i] # 四驱车和最后一个位置调换
break
# seq = convert_two_to_one(duan)
# if check_solution(seq, start) != 1:
# sys.exit("序列出错了!--44674s")
# results.append(duan)
return duan1, duan2
def add_oneSolution(new_duan, information_new, results, start, shihei_flag):
duan = deepcopy(new_duan)
tansuolv = []
for i in range(len(duan[6]) - 1, -1, -1):
if information_new[duan[6][i]][3] == 1 and information_new[duan[6][i]][1] == 8:
tansuolv.append(duan[6][i])
duan[6].pop(i)
if len(tansuolv) < 3:
print("没有了")
if len(tansuolv) < 1:
return
shanyaohei_er = []
shanyaohei_si = []
for i in range(len(duan[5])):
if information_new[duan[5][i]][3] == 1:
shanyaohei_si.append(duan[5][i])
elif information_new[duan[5][i]][3] == 0:
shanyaohei_er.append(duan[5][i])
else:
sys.exit("错erte误发生而且我平静安定")
B_shanyaohei_len = len(duan[4]) - shihei_flag
B_yu = B_shanyaohei_len % 5
result = []
if B_yu == 4:
result.append(shanyaohei_er[0])
shanyaohei_er.pop(0)
elif B_yu == 3:
result.extend(shanyaohei_er[0:2])
shanyaohei_er = shanyaohei_er[2:]
elif B_yu == 2:
result.extend(shanyaohei_er[0:3])
shanyaohei_er = shanyaohei_er[3:]
elif B_yu == 1:
if start == 157:
result.extend(shanyaohei_si[:2])
shanyaohei_si = shanyaohei_si[2:]
result.extend(shanyaohei_er[:1])
shanyaohei_er = shanyaohei_er[1:]
result.extend(shanyaohei_si[:1])
shanyaohei_si = shanyaohei_si[1:]
else:
result.extend(shanyaohei_er[0:4])
shanyaohei_er = shanyaohei_er[4:]
yuxia = len(shanyaohei_er) + len(shanyaohei_si) - (len(tansuolv) - 1) * 4
if yuxia % 5 != 0:
duan[6].insert(0, tansuolv[-1])
tansuolv.pop(len(tansuolv) - 1)
pos1, pos2, pos3 = 0, 0, 0
if start == 157:
result.append(tansuolv[0])
result.append(shanyaohei_er[0])
result.extend(shanyaohei_si[:2])
result.append(shanyaohei_er[1])
result.append(tansuolv[1])
result.append(shanyaohei_si[2])
result.extend(shanyaohei_er[2:])
duan[5] = result
seq = convert_two_to_one(duan)
if check_solution(seq, start) != 1:
sys.exit("序列出879674s")
results.append(duan)
return duan
while pos1 < len(shanyaohei_er) and pos2 < len(shanyaohei_si) and pos3 < len(tansuolv):
result.extend(shanyaohei_er[pos1:pos1 + 3])
result.extend(shanyaohei_si[pos2:pos2 + 1])
result.extend(tansuolv[pos3:pos3 + 1])
pos1 += 3
pos2 += 1
pos3 += 1
while pos1 < len(shanyaohei_er) and pos2 < len(shanyaohei_si):
result.extend(shanyaohei_er[pos1:pos1 + 1])
result.extend(shanyaohei_si[pos2:pos2 + 2])
pos1 += 1
pos2 += 2
result.extend(shanyaohei_er[pos1:])
# result.extend(shanyaohei_si[pos2:])
duan[5] = result
# 如果A闪耀黑,闪耀黑多了一个四驱车放在最后
for i in range(len(duan[5]) - 1, -1, -1):
# 为四驱车,且不为探索绿
if information_new[duan[5][i]][3] == 1 and information_new[duan[5][i]][1] != 8:
is_siqu = information_new[duan[5][i - 1]][3]
if is_siqu != 1:
duan[5][i], duan[5][-1] = duan[5][-1], duan[5][i] # 四驱车和最后一个位置调换
break
seq = convert_two_to_one(duan)
if check_solution(seq, start) != 1:
sys.exit("序列出错了!--44674s")
results.append(duan)
return duan