Я пытаюсь написать код, который находит лучшее решение для линейной задачи. Итак, для конкретной проблемы c я написал следующее:
import random
appropriate = 0
x_current = [0,0,0,0,0]
x_candidate = [0,0,0,0,0]
Optimal = []
def constraintsx(x):
appropriate = 0
if 3*x[0] + x[1] + 3*x[2] + 2*x[3] + 4*x[4] < 10:
appropriate = 1
if x[2] - x[3] > 0:
appropriate = 1
if x[1] - x[4] > 0:
appropriate = 1
if x[0] + x[1] + x[2] + x[3] + x[4] > 4:
appropriate = 1
return appropriate
def purpose(x):
FValue = x[0] + 3*x[1] - 2*x[2] + 2*x[3] - x[4]
return FValue
while True:
if constraintsx(x_current) == 0:
break
else:
for i in range(0,5):
x_current[i] = random.randint(0,1)
for k in range(0,10):
while True:
for j in range(0,5):
x_candidate[j] = random.randint(0,1)
if Kisitx(x_candidate) == 0:
print(k,"k") #I wrote these prints to see where the problem is
print(x_candidate,"candidate")
print(x_current,"current")
print(purpose(x_candidate),"candidate")
print(purpose(x_current),"current\n")
if purpose(x_candidate)>purpose(x_current):
x_current = x_candidate
print(purpose(x_current),"\n")
break
break
Optimal = x_current
FValue = purpose(Optimal)
print("The best solution:",Optimal,"\nSolution value=",FValue)
Но всякий раз, когда это условие гарантировано;
if purpose(x_candidate)>purpose(x_current):
x_current = x_candidate
Он просто изменяет «x_current» независимо от условия.
Итак, вот результат:
0 k
[1, 0, 1, 0, 1] candidate
[1, 0, 1, 1, 1] current
-2 candidate
0 current
1 k
[1, 0, 1, 1, 1] candidate
[1, 0, 1, 1, 1] current
0 candidate
0 current
2 k
[1, 1, 0, 1, 1] candidate
[1, 0, 1, 1, 1] current
5 candidate
0 current
5
3 k
[1, 0, 1, 1, 1] candidate
[1, 0, 1, 1, 1] current
0 candidate
0 current
4 k
[0, 1, 1, 1, 1] candidate
[0, 1, 1, 1, 1] current
2 candidate
2 current
5 k
[1, 1, 0, 1, 1] candidate
[1, 1, 0, 1, 1] current
5 candidate
5 current
6 k
[1, 1, 1, 1, 1] candidate
[1, 1, 1, 1, 1] current
3 candidate
3 current
7 k
[1, 0, 1, 1, 1] candidate
[1, 0, 1, 1, 1] current
0 candidate
0 current
8 k
[1, 1, 0, 1, 1] candidate
[1, 1, 0, 1, 1] current
5 candidate
5 current
9 k
[1, 1, 1, 0, 1] candidate
[1, 1, 1, 0, 1] current
1 candidate
1 current
The best solution: [1, 1, 1, 0, 1]
Solution value= 1
Как вы видите, условие будьте уверены, это просто продолжит изменять "x_current". Я новичок в Python, и я действительно не понимаю, почему он это делает. И я не знаю, как я могу описать эту ситуацию, хотя я пытался, но я не могу найти ничего подобного.
Почему он это делает? и как я могу решить это?
Спасибо за вашу помощь и внимание. Спасибо за все ...