Re: Ортогональные латинские квадраты 10-го порядка
Nataly-Mak Эту систему относительно каких параметров решать? И почему х11 и х41 такие длинные, откуда взялось 16 справа от х11 ? Как-то не все понимаю .
Автор:
Nataly-Mak [ 09 мар 2016, 22:43 ]
Заголовок сообщения:
Re: Ортогональные латинские квадраты 10-го порядка
Avgust Это не система. Это общая формула для ДЛК.
Решать никакие системы не надо. Система уже была мной составлена и решена. Вы видите общее решение системы. Теперь те перменные, что справа в формулах - это свободные переменные. Их надо перебирать. А те переменные, что слева в формулах, - это зависимые переменные, они вычисляются.
Вот вы задали значения для свободной переменной x26 и вычислили по формуле значение переменной x1. И так далее для всех зависимых переменных. Главное - хорошо организовать перебор. Ну, тут всего 19 вложенных циклов. Перебор идёт очень быстро и квадратов много получается.
Автор:
Avgust [ 09 мар 2016, 23:07 ]
Заголовок сообщения:
Re: Ортогональные латинские квадраты 10-го порядка
Nataly-Mak А можно генерировать 19 параметров случайным образом? При таком количестве вероятность повторов мизерная. И наверняка решения могут оказаться самые неожиданные.
Автор:
Nataly-Mak [ 09 мар 2016, 23:18 ]
Заголовок сообщения:
Re: Ортогональные латинские квадраты 10-го порядка
Avgust писал(а):
А можно генерировать 19 параметров случайным образом? При таком количестве вероятность повторов мизерная. И наверняка решения могут оказаться самые неожиданные.
Можно. Но не забывайте, что надо следить за различностью всех элементов в строках, столбцах и главных диагоналях. Иначе квадрат не будет ДЛК. За этим у меня следит программа, конечно. Она все элементы сравнивает и одинаковые (в строках, столбцах, диагоналях) не пропускает.
Автор:
Avgust [ 09 мар 2016, 23:25 ]
Заголовок сообщения:
Re: Ортогональные латинские квадраты 10-го порядка
Nataly-Mak Так лучше скиньте программу отслеживания допустимых 19 параметров. Так не хочется повторять ваши муки творческого программирования. Тем более, что я в Бейсике пишу
Автор:
Nataly-Mak [ 09 мар 2016, 23:45 ]
Заголовок сообщения:
Re: Ортогональные латинские квадраты 10-го порядка
Avgust для вас всё, что угодно Вот текст программы:
▼
#COMPILE EXE #DIM NONE
FUNCTION PBMAIN () AS LONG LOCAL I,J,K,I2,I8,I14,I20,I25,I29,I37,I26,I30,I28,I16,I17,I19,I21,I42,I43,I38,I39,I45 AS LONG LOCAL I1 AS LONG
DIM A(10,10) AS LONG, X(45) AS LONG
OPEN "A12.TXT" FOR OUTPUT AS #1
FOR I=1 TO 10:A(1,I)=I-1:NEXT I X(31)=9:A(8,1)=9:X(32)=8:A(8,2)=8:X(33)=7:A(8,3)=7:X(34)=6:A(8,4)=6:X(35)=5:A(8,5)=5 A(8,6)=4:A(8,7)=3:A(8,8)=2:A(8,9)=1:A(8,10)=0
FOR I2=2 TO 9 IF I2<>8 THEN IF I2<>9-X(33) THEN 200 GOTO 1000 200 X(2)=I2:A(2,2)=X(2):A(2,9)=9-X(2)
X(27)=9-X(2) IF X(27)<>1 THEN IF X(27)<>8 THEN 202 GOTO 1000
202 A(7,2)=X(27):A(7,9)=9-X(27)
FOR I8=0 TO 9 IF I8<>2 THEN IF I8<>7 THEN IF I8<>X(2) THEN IF 9-I8<>9 THEN 204 GOTO 998 204 X(8)=I8:A(3,3)=X(8):A(3,8)=9-X(8)
X(18)=9-X(8) IF X(18)<>2 THEN IF X(18)<>7 THEN 206 GOTO 998
206 A(5,3)=X(18):A(5,8)=9-X(18)
FOR I14=1 TO 9 IF I14<>3 THEN IF I14<>6 THEN IF I14<>X(2) THEN IF I14<>X(8) THEN IF 9-I14<>9 THEN IF I14<>9-X(33) THEN 208 GOTO 996 208 X(14)=I14:A(4,4)=X(14):A(4,7)=9-X(14)
X(44)=9-X(14) IF X(44)<>3 THEN IF X(44)<>6 THEN 210 GOTO 996 210 A(10,4)=X(44):A(10,7)=9-X(44)
FOR I20=1 TO 9 IF I20<>4 THEN IF I20<>5 THEN IF I20<>X(2) THEN IF I20<>X(8) THEN IF I20<>X(14) THEN IF 9-I20<>9 THEN IF I20<>9-X(33) THEN 212 GOTO 994 212 X(20)=I20:A(5,5)=X(20):A(5,6)=9-X(20)
X(10)=9-X(20) IF X(10)<>4 THEN IF X(10)<>5 THEN IF X(10)<>X(8) THEN IF X(10)<>9-X(8) THEN 214 GOTO 994 214 A(3,5)=X(10):A(3,6)=9-X(10)
FOR I25=0 TO 8 IF I25<>4 THEN IF I25<>5 THEN IF I25<>X(10) THEN IF I25<>X(20) THEN IF I25<>X(33) THEN IF I25<>9-X(20) THEN IF I25<>9-X(14) THEN IF I25<>9-X(8) THEN IF I25<>9-X(2) THEN 216 GOTO 992 216 X(25)=I25:A(6,5)=X(25):A(6,6)=9-X(25)
X(40)=9-X(25) IF X(40)<>4 THEN IF X(40)<>5 THEN IF X(40)<>X(8) THEN IF X(40)<>X(10) THEN IF X(40)<>X(20) THEN 218 GOTO 992 218 A(9,5)=X(40):A(9,6)=9-X(40)
FOR I29=0 TO 8 IF I29<>3 THEN IF I29<>6 THEN IF I29<>X(14) THEN IF I29<>X(27) THEN IF I29<>X(33) THEN IF I29<>9-X(20) THEN IF I29<>9-X(14) THEN IF I29<>9-X(8) THEN IF I29<>9-X(2) THEN IF I29<>X(25) THEN IF I29<>X(44) THEN IF I29<>9-X(27) THEN 220 GOTO 990 220 X(29)=I29:A(7,4)=X(29):A(7,7)=9-X(29)
X(4)=9-X(29) IF X(4)<>3 THEN IF X(4)<>6 THEN IF X(4)<>X(2) THEN IF X(4)<>X(44) THEN IF X(4)<>X(14) THEN IF X(4)<>9-X(2) THEN 222 GOTO 990 222 A(2,4)=X(4):A(2,7)=9-X(4)
FOR I37=0 TO 8 IF I37<>1 THEN IF I37<>8 THEN IF I37<>X(2) THEN IF I37<>X(22) THEN IF I37<>X(27) THEN IF I37<>X(40) THEN IF I37<>9-X(40) THEN IF I37<>X(29) THEN IF I37<>X(25) THEN IF I37<>X(33) THEN IF I37<>9-X(20) THEN IF I37<>9-X(14) THEN 226 GOTO 988 226 IF I37<>9-X(8) THEN IF I37<>9-X(2) THEN 227 GOTO 988 227 X(37)=I37:A(9,2)=X(37):A(9,9)=9-X(37)
X(22)=9-X(37) IF X(22)<>1 THEN IF X(22)<>8 THEN IF X(22)<>X(2) THEN IF X(22)<>X(27) THEN IF X(22)<>X(25) THEN IF X(22)<>9-X(25) THEN 228 GOTO 988 228 A(6,2)=X(22):A(6,9)=9-X(22)
x(41) = x(2)+ x(20)- x(25)+ x(14)- x(37)- x(29)+ x(8)-7 IF X(41)<>0 THEN IF X(41)<>9 THEN IF X(41)<>X(44) THEN IF X(41)<>9-X(44) THEN 230 GOTO 988 230 FOR I=25 TO 37 STEP 4 IF X(41)=X(I) THEN 988 NEXT I FOR I=2 TO 20 STEP 6 IF X(41)=9-X(I) THEN 988 NEXT I A(10,1)=X(41):A(10,10)=9-X(41)
x(11) = - x(2)- x(20)+ x(25)- x(14)+ x(37)+ x(29)- x(8)+16 IF X(11)<>0 THEN IF X(11)<>9 THEN IF X(11)<>X(14) THEN IF X(11)<>9-X(14) THEN 232 GOTO 988 232 A(4,1)=X(11):A(4,10)=9-X(11)
FOR I26=1 TO 8 IF I26<>X(11) THEN IF I26<>X(41) THEN IF I26<>X(27) THEN IF I26<>9-X(27) THEN IF I26<>X(29) THEN IF I26<>9-X(29) THEN 234 GOTO 986 234 X(26)=I26:A(7,1)=X(26):A(7,10)=9-X(26)
X(1)=9-X(26) IF X(1)<>0 THEN IF X(1)<>9 THEN IF X(1)<>X(11) THEN IF X(1)<>X(41) THEN IF X(1)<>X(2) THEN IF X(1)<>9-X(2) THEN IF X(1)<>X(4) THEN IF X(1)<>9-X(4) THEN 236 GOTO 986 236 A(2,1)=X(1):A(2,10)=9-X(1)
FOR I30=0 TO 9 IF I30<>4 THEN IF I30<>5 THEN IF I30<>X(26) THEN IF I30<>9-X(26) THEN IF I30<>X(10) THEN IF I30<>X(20) THEN IF I30<>X(25) THEN IF I30<>X(40) THEN IF I30<>X(29) THEN IF I30<>9-X(29) THEN 238 GOTO 984 238 X(30)=I30:A(7,5)=X(30):A(7,6)=9-X(30)
X(5)=9-X(30) IF X(5)<>4 THEN IF X(5)<>5 THEN IF X(5)<>X(1) THEN IF X(5)<>9-X(1) THEN IF X(5)<>X(2) THEN IF X(5)<>9-X(2) THEN IF X(5)<>X(4) THEN IF X(5)<>9-X(4) THEN 240 GOTO 984 240 IF X(5)<>X(10) THEN IF X(5)<>X(20) THEN IF X(5)<>X(20) THEN IF X(5)<>X(25) THEN IF X(5)<>X(40) THEN 242 GOTO 984 242 A(2,5)=X(5):A(2,6)=9-X(5)
FOR I28=0 TO 9 IF I28<>2 THEN IF I28<>7 THEN IF I28<>X(8) THEN IF I28<>X(18) THEN IF I28<>X(26) THEN IF I28<>9-X(26) THEN IF I28<>X(27) THEN IF I28<>9-X(27) THEN IF I28<>X(29) THEN IF I28<>9-X(29) THEN IF I28<>X(30) THEN IF I28<>9-X(30) THEN 244 GOTO 982 244 X(28)=I28:A(7,3)=X(28):A(7,8)=9-X(28)
X(3)=9-X(28) IF X(3)<>2 THEN IF X(3)<>7 THEN IF X(3)<>X(1) THEN IF X(3)<>9-X(1) THEN IF X(3)<>X(2) THEN IF X(3)<>9-X(2) THEN IF X(3)<>X(4) THEN IF X(3)<>9-X(4) THEN IF X(3)<>X(5) THEN IF X(3)<>9-X(5) THEN 246 GOTO 982 246 IF X(3)<>X(8) THEN IF X(3)<>X(18) THEN IF X(3)<>X(28) THEN 248 GOTO 982 248 A(2,3)=X(3):A(2,8)=9-X(3)
FOR I16=1 TO 8 IF I16<>X(1) THEN IF I16<>X(6) THEN IF I16<>X(11) THEN IF I16<>X(26) THEN IF I16<>X(41) THEN IF I16<>X(18) THEN IF I16<>9-X(18) THEN IF I16<>X(20) THEN IF I16<>9-X(20) THEN 249 GOTO 980 249 X(16)=I16:A(5,1)=X(16):A(5,10)=9-X(16)
X(6)=9-X(16) IF X(6)<>0 THEN IF X(6)<>9 THEN IF X(6)<>X(1) THEN IF X(6)<>X(11) THEN IF X(6)<>X(26) THEN IF X(6)<>X(41) THEN IF X(6)<>X(8) THEN IF X(6)<>9-X(8) THEN IF X(6)<>X(10) THEN IF X(6)<>9-X(10) THEN 250 GOTO 980 250 A(3,1)=X(6):A(3,10)=9-X(6)
FOR I17=0 TO 9 IF I17<>1 THEN IF I17<>8 THEN IF I17<>X(2) THEN IF I17<>X(22) THEN IF I17<>X(27) THEN IF I17<>X(37) THEN IF I17<>X(16) THEN IF I17<>9-X(16) THEN IF I17<>X(18) THEN IF I17<>9-X(18) THEN IF I17<>X(20) THEN IF I17<>9-X(20) THEN 252 GOTO 978 252 X(17)=I17:A(5,2)=X(17):A(5,9)=9-X(17)
X(7)=9-X(17) IF X(7)<>1 THEN IF X(7)<>8 THEN IF X(7)<>X(2) THEN IF X(7)<>X(17) THEN IF X(7)<>X(22) THEN IF X(7)<>X(27) THEN IF X(7)<>X(37) THEN IF X(7)<>X(8) THEN IF X(7)<>9-X(8) THEN IF X(7)<>X(10) THEN IF X(7)<>9-X(10) THEN IF X(7)<>X(6) THEN IF X(7)<>9-X(6) THEN 254 GOTO 978 254 A(3,2)=X(7):A(3,9)=9-X(7)
FOR I19=0 TO 9 IF I19<>3 THEN IF I19<>6 THEN IF I19<>X(4) THEN IF I19<>X(14) THEN IF I19<>X(29) THEN IF I19<>X(44) THEN IF I19<>X(20) THEN IF I19<>9-X(20) THEN 256 GOTO 976 256 FOR I=16 TO 18 IF I19=X(I) THEN 976 IF I19=9-X(I) THEN 976 NEXT I 258 X(19)=I19:A(5,4)=X(19):A(5,7)=9-X(19)
X(9)=9-X(19) IF X(9)<>3 THEN IF X(9)<>6 THEN IF X(9)<>X(4) THEN IF X(9)<>X(14) THEN IF X(9)<>X(29) THEN IF X(9)<>X(44) THEN IF X(9)<>X(10) THEN IF X(9)<>9-X(10) THEN 260 GOTO 976 260 FOR I=6 TO 8 IF X(9)=X(I) THEN 976 IF X(9)=9-X(I) THEN 976 NEXT I 262 A(3,4)=X(9):A(3,7)=9-X(9)
FOR I21=1 TO 8 IF I21<>X(26) THEN IF I21<>X(41) THEN IF I21<>X(22) THEN IF I21<>9-X(22) THEN IF I21<>X(25) THEN IF I21<>9-X(25) THEN 264 GOTO 974 264 FOR I=1 TO 16 STEP 5 IF I21=X(I) THEN 974 NEXT I X(21)=I21:A(6,1)=X(21):A(6,10)=9-X(21)
X(36)=9-X(21) IF X(36)<>0 THEN IF X(36)<>9 THEN IF X(36)<>X(41) THEN IF X(36)<>X(37) THEN IF X(36)<>9-X(37) THEN IF X(36)<>X(40) THEN IF X(36)<>9-X(40) THEN IF X(36)<>X(26) THEN 266 GOTO 974 266 FOR I=1 TO 16 STEP 5 IF X(36)=X(I) THEN 974 NEXT I A(9,1)=X(36):A(9,10)=9-X(36)
FOR I42=0 TO 9 IF I42<>1 THEN IF I42<>X(41) THEN IF I42<>9-X(41) THEN IF I42<>X(44) THEN IF I42<>9-X(44) THEN IF I42<>X(2) THEN IF I42<>X(7) THEN 268 GOTO 972 268 FOR I=17 TO 37 STEP 5 IF I42=X(I) THEN 972 NEXT I X(42)=I42:A(10,2)=X(42):A(10,9)=9-X(42)
X(12)=9-X(42) IF X(12)<>1 THEN IF X(12)<>8 THEN IF X(12)<>X(2) THEN IF X(12)<>X(7) THEN IF X(12)<>X(11) THEN IF X(12)<>9-X(11) THEN IF X(12)<>X(14) THEN IF X(12)<>9-X(14) THEN 270 GOTO 972 270 FOR I=17 TO 42 STEP 5 IF X(12)=X(I) THEN 972 NEXT I A(4,2)=X(12):A(4,9)=9-X(12)
FOR I43=0 TO 9 IF I43<>2 THEN IF I43<>7 THEN IF I43<>X(41) THEN IF I43<>9-X(41) THEN IF I43<>X(44) THEN IF I43<>9-X(44) THEN IF I43<>X(3) THEN IF I43<>X(8) THEN IF I43<>X(42) THEN IF I43<>9-X(42) THEN 272 GOTO 970 272 IF I43=X(18) THEN 970 IF I43=X(28) THEN 970 X(43)=I43:A(10,3)=X(43):A(10,8)=9-X(43)
X(13)=9-X(43) IF X(13)<>2 THEN IF X(13)<>7 THEN IF X(13)<>X(3) THEN IF X(13)<>X(8) THEN IF X(13)<>X(18) THEN IF X(13)<>X(28) THEN IF X(13)<>X(11) THEN IF X(13)<>9-X(11) THEN IF X(13)<>X(12) THEN IF X(13)<>9-X(12) THEN 274 GOTO 970 274 IF X(13)=X(14) THEN 970 IF X(13)=9-X(14) THEN 972 A(4,3)=X(13):A(4,8)=9-X(13)
FOR I38=0 TO 9 IF I38<>2 THEN IF I38<>7 THEN IF I38<>X(36) THEN IF I38<>9-X(36) THEN IF I38<>X(37) THEN IF I38<>9-X(37) THEN IF I38<>X(40) THEN IF I38<>9-X(40) THEN IF I38<>X(28) THEN IF I38<>X(43) THEN 276 GOTO 968 276 FOR I=3 TO 18 STEP 5 IF I38=X(I) THEN 968 NEXT I X(38)=I38:A(9,3)=X(38):A(9,8)=9-X(38)
X(23)=9-X(38) IF X(23)<>2 THEN IF X(23)<>7 THEN IF X(23)<>X(21) THEN IF X(23)<>9-X(21) THEN IF X(23)<>X(22) THEN IF X(23)<>9-X(22) THEN IF X(23)<>X(25) THEN IF X(23)<>9-X(25) THEN IF X(23)<>X(28) THEN IF X(23)<>X(43) THEN 280 GOTO 968 280 FOR I=3 TO 18 STEP 5 IF X(23)=X(I) THEN 968 NEXT I A(6,3)=X(23):A(6,8)=9-X(23)
FOR I39=0 TO 9 IF I39<>3 THEN IF I39<>6 THEN IF I39<>X(36) THEN IF I39<>9-X(36) THEN IF I39<>X(37) THEN IF I39<>9-X(37) THEN IF I39<>X(38) THEN IF I39<>9-X(38) THEN IF I39<>X(40) THEN IF I39<>9-X(40) THEN IF I39<>X(29) THEN IF I39<>X(44) THEN 282 GOTO 966 282 FOR I=4 TO 19 STEP 5 IF I39=X(I) THEN 966 NEXT I X(39)=I39:A(9,4)=X(39):A(9,7)=9-X(39)
X(24)=9-X(39) IF X(24)<>3 THEN IF X(24)<>6 THEN IF X(24)<>X(21) THEN IF X(24)<>9-X(21) THEN IF X(24)<>X(22) THEN IF X(24)<>9-X(22) THEN IF X(24)<>X(23) THEN IF X(24)<>9-X(23) THEN IF X(24)<>X(25) THEN IF X(24)<>9-X(25) THEN IF X(24)<>X(29) THEN IF X(24)<>X(44) THEN 284 GOTO 966 284 FOR I=4 TO 19 STEP 5 IF X(24)=X(I) THEN 966 NEXT I A(6,4)=X(24):A(6,7)=9-X(24)
FOR I45=0 TO 9 IF I45<>4 THEN IF I45<>X(41) THEN IF I45<>9-X(41) THEN IF I45<>X(42) THEN IF I45<>9-X(42) THEN IF I45<>X(43) THEN IF I45<>9-X(43) THEN IF I45<>X(44) THEN IF I45<>9-X(44) THEN 286 GOTO 964 286 IF I45=X(5) THEN 964 IF I45=X(10) THEN 964 FOR I=20 TO 40 STEP 5 IF I45=X(I) THEN 964 NEXT I X(45)=I45:A(10,5)=X(45):A(10,6)=9-X(45)
X(15)=9-X(45) IF X(15)<>4 THEN IF X(15)<>X(11) THEN IF X(15)<>9-X(11) THEN IF X(15)<>X(12) THEN IF X(15)<>9-X(12) THEN IF X(15)<>X(13) THEN IF X(15)<>9-X(13) THEN IF X(15)<>X(14) THEN IF X(15)<>9-X(14) THEN 288 GOTO 964 288 IF X(15)=X(5) THEN 964 IF X(15)=X(10) THEN 964 FOR I=20 TO 40 STEP 5 IF X(15)=X(I) THEN 964 NEXT I A(4,5)=X(15):A(4,6)=9-X(15)
GOTO 300
964 NEXT I45 966 NEXT I39 968 NEXT I38 970 NEXT I43 972 NEXT I42 974 NEXT I21 976 NEXT I19 978 NEXT I17 980 NEXT I16 982 NEXT I28 984 NEXT I30 986 NEXT I26 988 NEXT I37 990 NEXT I29 992 NEXT I25 994 NEXT I20 996 NEXT I14 998 NEXT I8 1000 NEXT I2
GOTO 2000
300 K=K+1
FOR I=1 TO 10 FOR J=1 TO 10 PRINT #1,A(I,J); NEXT J PRINT #1, NEXT I PRINT #1,
IF K=10000 THEN 2000 GOTO 964
2000 CLOSE #1 END
END FUNCTION
Автор:
Nataly-Mak [ 09 мар 2016, 23:55 ]
Заголовок сообщения:
Re: Ортогональные латинские квадраты 10-го порядка
Да, там в самом конце задаётся K - сколько квадратов генерировать.
IF K=10000 THEN 2000 GOTO 964
Сейчас задано 10000. Я уже и 50000 генерировала. Но для генерации различных квадратов в порции, как вы понимаете, надо изменять значения перебираемых переменных. Если для одних и тех же будете генерировать, то квадраты у вас всё время одни и те же будут получаться.
Автор:
Avgust [ 10 мар 2016, 00:13 ]
Заголовок сообщения:
Re: Ортогональные латинские квадраты 10-го порядка
Nataly-Mak Ой, нет! Это не мой Yabasic (достаточно сказать, что в нем отсутствует операнд GOTO). Проще, конечно, самому написать, чем разбираться и потом все равно закапываться . Тем более, что я буду генерировать 19 свободных переменных случайным образом. Мне тогда девятнадцати циклов не потребуется, а напороться на хороший результат, возможно, будет быстрее. Это по опыту прежних работ из другой области.
Автор:
Nataly-Mak [ 10 мар 2016, 00:27 ]
Заголовок сообщения:
Re: Ортогональные латинские квадраты 10-го порядка
Avgust ну так я вам сто лет назад говорила, что Бейсики у нас разные. Так что, не ленитесь Писать всё равно самому придётся программу. Если интересно поискать.
Все желающие могут взять там программу и поиграть в генерацию ДЛК из семейства Брауна.
Автор:
Avgust [ 10 мар 2016, 00:46 ]
Заголовок сообщения:
Re: Ортогональные латинские квадраты 10-го порядка
Nataly-Mak Прога моя будет элементарной: случайно набираю 19 параметров в пределах от 0 до 9, вставляю в ваши формулы, затем просто проверяю знаки и условия, чтобы сумма квадратов по строкам, колонкам и главным диагоналям была 285. Благодаря сумасшедшей скорости компа, решений будет очень много, а вероятность повтора мизерной. Мне не придется тщательно следить за отсутствием совпадений чисел - все это возьмут на себя проверка положительности параметров и число 285.